import type { APIRoute } from 'astro';
import { supabase } from '../../../../../lib/supabase';

export const GET: APIRoute = async ({ params, request }) => {
  try {
    const eventId = params.id;
    if (!eventId) {
      return new Response('Event ID is required', { status: 400 });
    }

    // Get user session
    const authHeader = request.headers.get('Authorization');
    const token = authHeader?.replace('Bearer ', '');
    
    if (!token) {
      return new Response('Authentication required', { status: 401 });
    }

    const { data: { user }, error: authError } = await supabase.auth.getUser(token);
    if (authError || !user) {
      return new Response('Invalid authentication', { status: 401 });
    }

    // Get user's organization
    const { data: userData, error: userError } = await supabase
      .from('users')
      .select('organization_id')
      .eq('id', user.id)
      .single();

    if (userError || !userData?.organization_id) {
      return new Response('User organization not found', { status: 403 });
    }

    // Get event details
    const { data: event, error: eventError } = await supabase
      .from('events')
      .select('*')
      .eq('id', eventId)
      .eq('organization_id', userData.organization_id)
      .single();

    if (eventError || !event) {
      return new Response('Event not found or access denied', { status: 404 });
    }

    // Get marketing kit assets
    const { data: assets, error: assetsError } = await supabase
      .from('marketing_kit_assets')
      .select('*')
      .eq('event_id', eventId)
      .eq('is_active', true)
      .order('generated_at', { ascending: false });

    if (assetsError || !assets || assets.length === 0) {
      return new Response('No marketing kit assets found', { status: 404 });
    }

    // Create a simple ZIP-like response for now
    // In production, you'd generate an actual ZIP file
    const zipContent = {
      event: {
        title: event.title,
        date: event.start_time,
        venue: event.venue
      },
      assets: assets.map(asset => ({
        type: asset.asset_type,
        title: asset.title,
        url: asset.image_url || asset.download_url,
        content: asset.content
      })),
      generated_at: new Date().toISOString()
    };

    // Return JSON for now - in production this would be a ZIP file
    return new Response(JSON.stringify(zipContent, null, 2), {
      status: 200,
      headers: {
        'Content-Type': 'application/json',
        'Content-Disposition': `attachment; filename="${event.slug}-marketing-kit.json"`,
        'Cache-Control': 'no-cache'
      }
    });

  } catch (error) {

    return new Response('Internal server error', { status: 500 });
  }
};