import { NextRequest, NextResponse } from 'next/server';
import { supabase } from '@/lib/supabase';

type PushSubscriptionPayload = {
  subscription: PushSubscriptionJSON;
  platform?: string;
};

type PushSubscriptionJSON = {
  endpoint: string;
  expirationTime: number | null;
  keys: {
    p256dh: string;
    auth: string;
  };
};

export async function POST(request: NextRequest) {
  try {
    const authUserCookie = request.cookies.get('AuthUser');

    if (!authUserCookie?.value) {
      return NextResponse.json({ error: 'User not authenticated' }, { status: 401 });
    }

    let user;
    try {
      user = JSON.parse(authUserCookie.value) as { id: number };
    } catch (error) {
      return NextResponse.json({ error: 'Invalid user session' }, { status: 401 });
    }

    const body = (await request.json()) as PushSubscriptionPayload;

    if (!body?.subscription?.endpoint || !body.subscription.keys?.p256dh || !body.subscription.keys?.auth) {
      return NextResponse.json({ error: 'Invalid subscription payload' }, { status: 400 });
    }

    const { subscription, platform } = body;

    const { error } = await supabase.from('push_subscriptions').upsert(
      {
        user_id: user.id,
        endpoint: subscription.endpoint,
        subscription,
        platform: platform ?? null,
        updated_at: new Date().toISOString(),
      },
      { onConflict: 'endpoint' }
    );

    if (error) {
      console.error('Error saving push subscription:', error);
      return NextResponse.json({ error: 'Failed to save subscription' }, { status: 500 });
    }

    return NextResponse.json({ success: true });
  } catch (error) {
    console.error('Error processing push subscription:', error);
    return NextResponse.json({ error: 'Server error' }, { status: 500 });
  }
}

