import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

/**
 * 🔵 Next.js 내부 API - 토큰 자동 로그인 프록시
 *
 * MNG 관리자 패널에서 "SAM 접속" 버튼 클릭 시 사용
 * One-Time Token으로 사용자 인증 후 HttpOnly 쿠키 설정
 *
 * 🔄 동작 흐름:
 * 1. 클라이언트 → Next.js /api/auth/token-login (token)
 * 2. Next.js → PHP /api/v1/token-login (토큰 검증)
 * 3. PHP → Next.js (access_token, refresh_token, 사용자 정보)
 * 4. Next.js: 토큰을 HttpOnly 쿠키로 설정
 * 5. Next.js → 클라이언트 (토큰 제외한 사용자 정보만 전달)
 */

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { token } = body;

    if (!token) {
      return NextResponse.json(
        { error: '토큰이 필요합니다.' },
        { status: 400 }
      );
    }

    // PHP 백엔드 API 호출
    const backendResponse = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/v1/token-login`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-API-KEY': process.env.API_KEY || '',
      },
      body: JSON.stringify({ token }),
    });

    if (!backendResponse.ok) {
      const errorData = await backendResponse.json().catch(() => ({}));
      return NextResponse.json(
        { error: errorData.error || '토큰 인증에 실패했습니다.' },
        { status: backendResponse.status }
      );
    }

    const data = await backendResponse.json();

    // 클라이언트에 전달할 응답 (토큰 제외)
    const responseData = {
      message: data.message,
      user: data.user,
      tenant: data.tenant,
      menus: data.menus,
      roles: data.roles,
      token_type: data.token_type,
      expires_in: data.expires_in,
      expires_at: data.expires_at,
    };

    // HttpOnly 쿠키 설정 (login/route.ts와 동일한 패턴)
    const isProduction = process.env.NODE_ENV === 'production';

    const accessTokenCookie = [
      `access_token=${data.access_token}`,
      'HttpOnly',
      ...(isProduction ? ['Secure'] : []),
      'SameSite=Lax',
      'Path=/',
      `Max-Age=${data.expires_in || 7200}`,
    ].join('; ');

    const refreshTokenCookie = [
      `refresh_token=${data.refresh_token}`,
      'HttpOnly',
      ...(isProduction ? ['Secure'] : []),
      'SameSite=Lax',
      'Path=/',
      'Max-Age=604800',
    ].join('; ');

    const isAuthenticatedCookie = [
      'is_authenticated=true',
      ...(isProduction ? ['Secure'] : []),
      'SameSite=Lax',
      'Path=/',
      `Max-Age=${data.expires_in || 7200}`,
    ].join('; ');

    const response = NextResponse.json(responseData, { status: 200 });

    response.headers.append('Set-Cookie', accessTokenCookie);
    response.headers.append('Set-Cookie', refreshTokenCookie);
    response.headers.append('Set-Cookie', isAuthenticatedCookie);

    return response;

  } catch (error) {
    console.error('Token login proxy error:', error);
    return NextResponse.json(
      { error: 'Internal server error' },
      { status: 500 }
    );
  }
}