import { NextRequest, NextResponse } from 'next/server'
import pool from '@/lib/db'

export const dynamic = 'force-dynamic'

// GET: Load all scenarios with their assumptions
export async function GET() {
  try {
    const client = await pool.connect()
    try {
      const scenarios = await client.query(
        'SELECT * FROM pitch_fm_scenarios ORDER BY is_default DESC, name'
      )

      const assumptions = await client.query(
        'SELECT * FROM pitch_fm_assumptions ORDER BY sort_order'
      )

      const result = scenarios.rows.map(s => ({
        ...s,
        assumptions: assumptions.rows
          .filter(a => a.scenario_id === s.id)
          .map(a => ({
            ...a,
            value: typeof a.value === 'string' ? JSON.parse(a.value) : a.value,
          })),
      }))

      return NextResponse.json(result)
    } finally {
      client.release()
    }
  } catch (error) {
    console.error('Financial model load error:', error)
    return NextResponse.json({ error: 'Failed to load scenarios' }, { status: 500 })
  }
}

// POST: Create a new scenario
export async function POST(request: NextRequest) {
  try {
    const body = await request.json()
    const { name, description, color, copyFrom } = body

    if (!name) {
      return NextResponse.json({ error: 'Name is required' }, { status: 400 })
    }

    const client = await pool.connect()
    try {
      const scenario = await client.query(
        'INSERT INTO pitch_fm_scenarios (name, description, color) VALUES ($1, $2, $3) RETURNING *',
        [name, description || '', color || '#6366f1']
      )

      // If copyFrom is set, copy assumptions from another scenario
      if (copyFrom) {
        await client.query(`
          INSERT INTO pitch_fm_assumptions (scenario_id, key, label_de, label_en, value, value_type, unit, min_value, max_value, step_size, category, sort_order)
          SELECT $1, key, label_de, label_en, value, value_type, unit, min_value, max_value, step_size, category, sort_order
          FROM pitch_fm_assumptions WHERE scenario_id = $2
        `, [scenario.rows[0].id, copyFrom])
      }

      return NextResponse.json(scenario.rows[0])
    } finally {
      client.release()
    }
  } catch (error) {
    console.error('Create scenario error:', error)
    return NextResponse.json({ error: 'Failed to create scenario' }, { status: 500 })
  }
}
