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

/**
 * 🔵 Next.js 내부 API - 회원가입 프록시 (PHP 백엔드로 전달)
 *
 * ⚡ 설계 목적:
 * - 입력 검증: 클라이언트에서 받은 데이터 유효성 확인
 * - 에러 처리: 백엔드 에러를 사용자 친화적인 메시지로 변환
 * - 보안: 백엔드 상세 에러 메시지 노출 방지
 *
 * 🔄 동작 흐름:
 * 1. 클라이언트 → Next.js /api/auth/signup (회원가입 정보)
 * 2. Next.js: 필수 필드 유효성 검증
 * 3. Next.js → PHP /api/v1/register (회원가입 요청)
 * 4. PHP → Next.js (성공/실패 응답)
 * 5. Next.js → 클라이언트 (사용자 친화적 메시지)
 *
 * 📋 필수 필드:
 * - user_id, name, email, phone
 * - password, password_confirmation
 * - company_name, business_num, company_scale, industry
 * - position (선택)
 *
 * 🔐 보안 특징:
 * - 백엔드 상세 에러 숨김 (정보 유출 방지)
 * - 일반화된 에러 메시지 제공
 * - 입력 데이터 사전 검증
 *
 * ⚠️ 주의:
 * - 이 API는 PHP /api/v1/register의 프록시입니다
 * - 회원가입 시 토큰은 발급하지 않음 (로그인 페이지로 리다이렉트)
 */
export async function POST(request: NextRequest) {
  try {
    const body = await request.json();

    // Validate required fields
    const requiredFields = [
      'user_id',
      'name',
      'email',
      'phone',
      'password',
      'password_confirmation',
      'company_name',
      'business_num',
      'company_scale',
      'industry',
    ];

    for (const field of requiredFields) {
      if (!body[field]) {
        return NextResponse.json(
          { error: `${field} is required` },
          { status: 400 }
        );
      }
    }

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

    if (!backendResponse.ok) {
      // Handle backend errors with user-friendly messages
      let errorMessage = 'Registration failed';

      if (backendResponse.status === 422) {
        // Validation error
        const data = await backendResponse.json();
        errorMessage = data.message || 'Invalid registration data';
      } else if (backendResponse.status === 409) {
        errorMessage = 'User ID or email already exists';
      } else if (backendResponse.status === 429) {
        errorMessage = 'Too many registration attempts. Please try again later';
      } else if (backendResponse.status >= 500) {
        errorMessage = 'Service temporarily unavailable';
      }

      return NextResponse.json(
        { error: errorMessage },
        { status: backendResponse.status }
      );
    }

    const data = await backendResponse.json();


    return NextResponse.json(
      {
        message: data.message || 'Registration successful',
        user: data.user,
      },
      { status: 201 }
    );

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