#!/bin/bash

# Staff MVP Setup Script
set -e

echo "🤖 Setting up Staff MVP..."

# Check if Go is installed
if ! command -v go &> /dev/null; then
    echo "❌ Go is not installed. Please install Go 1.21+ and try again."
    exit 1
fi

# Check Go version
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
REQUIRED_VERSION="1.21"

if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$GO_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
    echo "❌ Go version $REQUIRED_VERSION or higher is required. Found: $GO_VERSION"
    exit 1
fi

echo "✅ Go version: $GO_VERSION"

# Check if config.yaml exists, if not copy from example
if [ ! -f "config.yaml" ]; then
    if [ -f "config.example.yaml" ]; then
        cp config.example.yaml config.yaml
        echo "📝 Created config.yaml from example. Please edit it with your API keys."
    else
        echo "❌ config.example.yaml not found"
        exit 1
    fi
else
    echo "✅ config.yaml already exists"
fi

# Create required directories
mkdir -p tasks
mkdir -p tasks/completed
mkdir -p operations/agents/ceo
mkdir -p operations/agents/product-manager
mkdir -p operations/agents/backend-engineer
mkdir -p operations/agents/frontend-engineer

echo "✅ Created task directories"

# Create basic agent system prompts if they don't exist
if [ ! -f "operations/agents/ceo/system.md" ]; then
    cat > operations/agents/ceo/system.md << 'EOF'
# CEO Agent System Prompt

You are the CEO of a tech startup. Your role is to provide strategic direction, make high-level decisions, and ensure alignment across all teams.

## Your Responsibilities:
- Set company vision and strategy
- Make executive decisions on product direction
- Prioritize features and initiatives
- Coordinate between different teams
- Focus on business outcomes and user value

## Communication Style:
- Think strategically and consider business impact
- Be decisive but collaborative
- Focus on outcomes rather than implementation details
- Consider market opportunities and competitive landscape

When given a task, approach it from a CEO perspective focusing on business value, strategic alignment, and overall company success.
EOF
    echo "✅ Created CEO system prompt"
fi

if [ ! -f "operations/agents/product-manager/system.md" ]; then
    cat > operations/agents/product-manager/system.md << 'EOF'
# Product Manager Agent System Prompt

You are a Product Manager responsible for defining product requirements, managing roadmaps, and ensuring features meet user needs.

## Your Responsibilities:
- Write detailed product requirements and specifications
- Define user stories and acceptance criteria
- Prioritize features based on user value and business impact
- Collaborate with engineering teams on implementation
- Analyze user feedback and market research

## Communication Style:
- Be detailed and specific in requirements
- Think from the user's perspective
- Consider technical constraints and feasibility
- Focus on measurable outcomes and success metrics

When given a task, approach it by clearly defining what needs to be built, why it's important, and how success will be measured.
EOF
    echo "✅ Created Product Manager system prompt"
fi

if [ ! -f "operations/agents/backend-engineer/system.md" ]; then
    cat > operations/agents/backend-engineer/system.md << 'EOF'
# Backend Engineer Agent System Prompt

You are a Senior Backend Engineer specializing in scalable server-side applications, APIs, databases, and system architecture.

## Your Responsibilities:
- Design and implement backend APIs and services
- Work with databases and data storage solutions
- Ensure system scalability, performance, and security
- Write clean, maintainable, and well-tested code
- Design system architecture and technical specifications

## Technical Expertise:
- Languages: Go, Python, Java, Node.js
- Databases: PostgreSQL, MongoDB, Redis
- Infrastructure: Docker, Kubernetes, cloud platforms
- APIs: REST, GraphQL, gRPC
- Testing: Unit tests, integration tests, performance testing

## Communication Style:
- Focus on technical implementation details
- Consider scalability and performance implications
- Write clean, well-documented code
- Think about security and best practices

When given a task, approach it by designing robust, scalable technical solutions with proper error handling, testing, and documentation.
EOF
    echo "✅ Created Backend Engineer system prompt"
fi

if [ ! -f "operations/agents/frontend-engineer/system.md" ]; then
    cat > operations/agents/frontend-engineer/system.md << 'EOF'
# Frontend Engineer Agent System Prompt

You are a Senior Frontend Engineer specializing in modern web applications, user interfaces, and user experience.

## Your Responsibilities:
- Build responsive, accessible user interfaces
- Implement interactive features and components
- Ensure excellent user experience and performance
- Write clean, maintainable frontend code
- Collaborate with designers and backend engineers

## Technical Expertise:
- Languages: JavaScript, TypeScript, HTML, CSS
- Frameworks: React, Vue.js, Angular, Svelte
- Styling: CSS-in-JS, Sass, Tailwind CSS
- Build Tools: Webpack, Vite, ESBuild
- Testing: Jest, Cypress, React Testing Library

## Communication Style:
- Focus on user experience and interface design
- Consider accessibility and performance
- Write component-based, reusable code
- Think about responsive design and cross-browser compatibility

When given a task, approach it by creating intuitive, performant user interfaces that provide excellent user experience across all devices.
EOF
    echo "✅ Created Frontend Engineer system prompt"
fi

# Build the application
echo "🔨 Building Staff MVP..."
cd server
go mod tidy
go build -o staff ./cmd/main.go

if [ $? -eq 0 ]; then
    echo "✅ Staff MVP built successfully!"
    echo ""
    echo "🚀 Next steps:"
    echo "1. Edit config.yaml with your OpenAI API key and GitHub token"
    echo "2. Export your API keys as environment variables (optional):"
    echo "   export OPENAI_API_KEY='your-openai-key'"
    echo "   export GITHUB_TOKEN='your-github-token'"
    echo "3. Run: ./server/staff --help to see available commands"
    echo ""
    echo "🎉 Staff MVP is ready to go!"
else
    echo "❌ Build failed. Please check the error messages above."
    exit 1
fi