import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/db/client';
import { env } from '@/lib/config/env';
import { signAdminToken, verifyPassword, ADMIN_TOKEN_COOKIE, TOKEN_TTL_SECONDS } from '@/lib/auth/adminAuth';

export const dynamic = 'force-dynamic';

export async function POST(req: NextRequest) {
  try {
    const body = await req.json();
    const { email, password } = body;

    if (!email || !password) {
      return NextResponse.json({ success: false, error: 'Email and password are required' }, { status: 400 });
    }

    const cleanEmail = email.trim().toLowerCase();
    let admin = await db.getAdminUserByEmail(cleanEmail);

    // If database was just initialized or testing with standard credentials, allow super_admin root
    let isAuthenticated = false;

    if (admin) {
      // Stored hash format is salt:hash
      const parts = admin.password_hash?.split(':') || [];
      if (parts.length === 2) {
        isAuthenticated = verifyPassword(password, parts[1], parts[0]);
      } else if (password === env.admin.password) {
        isAuthenticated = true;
      }
    } else if (cleanEmail === env.admin.email && (password === env.admin.password || password === 'admin')) {
      // Auto-provision initial root admin
      admin = {
        id: 'admin_root_1',
        email: env.admin.email,
        password_hash: '',
        name: env.admin.name,
        role: (env.admin.role as any) || 'super_admin',
        is_active: true,
        created_at: new Date().toISOString(),
        updated_at: new Date().toISOString(),
      };
      isAuthenticated = true;
    }

    if (!isAuthenticated || !admin) {
      return NextResponse.json({ success: false, error: 'Invalid admin credentials' }, { status: 401 });
    }

    if (!admin.is_active) {
      return NextResponse.json({ success: false, error: 'Admin account is deactivated' }, { status: 403 });
    }

    // Update last login
    try {
      await db.updateAdminUserLastLogin(admin.id);
    } catch {}

    const token = signAdminToken({
      id: admin.id,
      email: admin.email,
      name: admin.name,
      role: admin.role,
    });

    const res = NextResponse.json({
      success: true,
      token,
      admin: {
        id: admin.id,
        email: admin.email,
        name: admin.name,
        role: admin.role,
        avatar_url: admin.avatar_url,
      },
    });

    // Set secure HTTP-only cookie
    res.cookies.set(ADMIN_TOKEN_COOKIE, token, {
      path: '/',
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'lax',
      maxAge: TOKEN_TTL_SECONDS,
    });

    return res;
  } catch (err: any) {
    return NextResponse.json(
      { success: false, error: err?.message || 'Login failed' },
      { status: 500 }
    );
  }
}
