import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/db/client';
import { decrypt } from '@/lib/crypto/encryption';
import { MetaGraphClient } from '@/lib/meta/client';
import { getAuthenticatedStore, unauthorizedResponse } from '@/lib/auth/storeContext';

export const dynamic = 'force-dynamic';

export async function GET(req: NextRequest) {
  try {
    const shop = await getAuthenticatedStore(req);
    if (!shop) {
      return unauthorizedResponse();
    }

    const metaConn = await db.getMetaConnectionByShopId(shop.id);
    const metaToken = metaConn?.access_token_encrypted ? decrypt(metaConn.access_token_encrypted) : '';

    const metaClient = new MetaGraphClient(metaToken || 'demo_token');
    const businesses = await metaClient.getBusinesses();
    const catalogs = await metaClient.getCatalogs(metaConn?.business_id || businesses[0]?.id || 'biz_demo');
    const pixels = await metaClient.getPixels(metaConn?.business_id || businesses[0]?.id || 'biz_demo');

    return NextResponse.json({
      success: true,
      shop: {
        id: shop.id,
        domain: shop.shopify_domain,
        connected: shop.status === 'installed',
      },
      meta: {
        connected: metaConn?.status === 'connected',
        businessId: metaConn?.business_id,
        catalogId: metaConn?.catalog_id,
        pixelId: metaConn?.pixel_id,
        testEventCode: metaConn?.test_event_code,
      },
      options: {
        businesses,
        catalogs,
        pixels,
      },
    });
  } catch (err) {
    return NextResponse.json(
      { success: false, error: err instanceof Error ? err.message : 'Internal Server Error' },
      { status: 500 }
    );
  }
}
