import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/db/client';
import { generateMetaCsvFeed } from '@/lib/meta/feed';

export const dynamic = 'force-dynamic';

export async function GET(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url);
    const shopDomain = searchParams.get('shop');

    let shop = null;
    if (shopDomain) {
      shop = await db.getShopByDomain(shopDomain);
    }
    if (!shop && process.env.NODE_ENV !== 'production') {
      shop = await db.getDefaultShop();
    }
    if (!shop) {
      return new NextResponse('Error: Valid "shop" query parameter is required', {
        status: 400,
        headers: { 'Content-Type': 'text/plain' },
      });
    }

    const products = await db.getProductsByShopId(shop.id);
    const csv = generateMetaCsvFeed(products);

    return new NextResponse(csv, {
      status: 200,
      headers: {
        'Content-Type': 'text/csv; charset=utf-8',
        'Content-Disposition': `attachment; filename="${shop.shopify_domain}-meta-feed.csv"`,
        'Cache-Control': 'public, max-age=3600, s-maxage=3600',
      },
    });
  } catch (err) {
    return new NextResponse(`Error: ${err instanceof Error ? err.message : 'Internal Server Error'}`, {
      status: 500,
      headers: { 'Content-Type': 'text/plain' },
    });
  }
}
