/**
 * Demo Data Seed API Endpoint
 *
 * This endpoint seeds demo data via the same storage mechanism as real customer data.
 * Demo data is NOT hardcoded - it goes through the normal API/database path.
 */

import { NextRequest, NextResponse } from 'next/server'
import { generateDemoState } from '@/lib/sdk/demo-data'

// In-memory store (same as state endpoint - will be replaced with PostgreSQL)
declare global {
  // eslint-disable-next-line no-var
  var demoStateStore: Map<string, { state: unknown; version: number; updatedAt: Date }> | undefined
}

if (!global.demoStateStore) {
  global.demoStateStore = new Map()
}

const stateStore = global.demoStateStore

export async function POST(request: NextRequest) {
  try {
    const body = await request.json()
    const { tenantId = 'demo-tenant', userId = 'demo-user' } = body

    // Generate demo state using the seed data templates
    const demoState = generateDemoState(tenantId, userId)

    // Store via the same mechanism as real data
    const storedState = {
      state: demoState,
      version: 1,
      updatedAt: new Date(),
    }

    stateStore.set(tenantId, storedState)

    return NextResponse.json({
      success: true,
      message: `Demo data seeded for tenant ${tenantId}`,
      tenantId,
      version: 1,
    })
  } catch (error) {
    console.error('Failed to seed demo data:', error)
    return NextResponse.json(
      {
        success: false,
        error: error instanceof Error ? error.message : 'Unknown error',
      },
      { status: 500 }
    )
  }
}

export async function GET(request: NextRequest) {
  const { searchParams } = new URL(request.url)
  const tenantId = searchParams.get('tenantId') || 'demo-tenant'

  const stored = stateStore.get(tenantId)

  if (!stored) {
    return NextResponse.json({
      hasData: false,
      tenantId,
    })
  }

  return NextResponse.json({
    hasData: true,
    tenantId,
    version: stored.version,
    updatedAt: stored.updatedAt,
  })
}
