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

type LaravelUser = {
  id: number;
  name: string;
  email: string;
  phone?: string;
  is_affiliate?: boolean;
};

async function getSupabaseUserIdFromCookie(request: NextRequest): Promise<string | null> {
  const authUserCookie = request.cookies.get('AuthUser');
  if (!authUserCookie?.value) return null;
  try {
    const laravelUser = JSON.parse(authUserCookie.value) as LaravelUser;
    if (!laravelUser?.id) return null;
    const { data } = await supabase
      .from('users')
      .select('id')
      .eq('main_id', laravelUser.id)
      .single();
    return data?.id ?? null;
  } catch {
    return null;
  }
}

export async function GET(request: NextRequest) {
  try {
    const supabaseUserId = await getSupabaseUserIdFromCookie(request);
    if (!supabaseUserId) {
      return NextResponse.json({ error: 'User not authenticated' }, { status: 401 });
    }

    const { data: template, error } = await supabase
      .from('invitation_message_templates')
      .select('id, content, is_default, updated_at, last_used_at')
      .eq('user_id', supabaseUserId)
      .eq('is_default', true)
      .single();

    if (error && error.code !== 'PGRST116') {
      return NextResponse.json({ error: 'Failed to fetch template' }, { status: 500 });
    }

    return NextResponse.json({ success: true, template: template ?? null });
  } catch (err) {
    return NextResponse.json({ error: 'Server error' }, { status: 500 });
  }
}

export async function PUT(request: NextRequest) {
  try {
    const supabaseUserId = await getSupabaseUserIdFromCookie(request);
    if (!supabaseUserId) {
      return NextResponse.json({ error: 'User not authenticated' }, { status: 401 });
    }

    const body = await request.json();
    const content: string | undefined = typeof body?.content === 'string' ? body.content.trim() : undefined;
    if (!content) {
      return NextResponse.json({ error: 'Content is required' }, { status: 422 });
    }

    const { data: existing } = await supabase
      .from('invitation_message_templates')
      .select('id')
      .eq('user_id', supabaseUserId)
      .eq('is_default', true)
      .single();

    const nowIso = new Date().toISOString();

    if (existing) {
      const { error: updateError } = await supabase
        .from('invitation_message_templates')
        .update({ content, updated_at: nowIso, last_used_at: nowIso })
        .eq('id', existing.id);
      if (updateError) {
        return NextResponse.json({ error: 'Failed to update template' }, { status: 500 });
      }
      return NextResponse.json({ success: true, updated: true });
    }

    const { error: insertError } = await supabase
      .from('invitation_message_templates')
      .insert({ user_id: supabaseUserId, content, is_default: true, last_used_at: nowIso });
    if (insertError) {
      return NextResponse.json({ error: 'Failed to create template' }, { status: 500 });
    }
    return NextResponse.json({ success: true, created: true });
  } catch (err) {
    return NextResponse.json({ error: 'Server error' }, { status: 500 });
  }
}


