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 }) } }