'use client';

import { useRouter, useParams } from 'next/navigation';
import { toast } from 'sonner';
import { EmployeeForm } from '@/components/hr/EmployeeManagement/EmployeeForm';
import { createEmployee } from '@/components/hr/EmployeeManagement/actions';
import type { EmployeeFormData } from '@/components/hr/EmployeeManagement/types';

/**
 * Server Action 결과에서 상세 에러 메시지 생성
 * - status: HTTP 상태 코드
 * - error: 기본 에러 메시지
 * - errors: validation errors (필드별 에러 배열)
 */
function formatErrorMessage(result: {
  error?: string;
  errors?: Record<string, string[]>;
  status?: number;
}): string {
  const parts: string[] = [];

  // 상태 코드 추가
  if (result.status) {
    parts.push(`[${result.status}]`);
  }

  // 기본 메시지 추가
  if (result.error) {
    parts.push(result.error);
  }

  // validation errors가 있으면 모든 에러 추가
  if (result.errors) {
    const errorMessages = Object.entries(result.errors)
      .map(([field, messages]) => `${field}: ${messages[0]}`)
      .join(', ');
    if (errorMessages) {
      parts.push(`(${errorMessages})`);
    }
  }

  return parts.join(' ') || '알 수 없는 오류가 발생했습니다.';
}

export default function EmployeeNewPage() {
  const router = useRouter();
  const params = useParams();
  const locale = params.locale as string || 'ko';

  const handleSave = async (data: EmployeeFormData): Promise<{ success: boolean; error?: string }> => {
    try {
      const result = await createEmployee(data);
      if (result.success) {
        toast.success('사원이 등록되었습니다.');
        router.push(`/${locale}/hr/employee-management`);
        return { success: true };
      } else {
        const errorMessage = formatErrorMessage(result);
        toast.error(errorMessage);
        console.warn('[EmployeeNewPage] Create failed:', result);
        return { success: false, error: errorMessage };
      }
    } catch (error) {
      toast.error('서버 오류가 발생했습니다.');
      console.error('[EmployeeNewPage] Create error:', error);
      return { success: false, error: '서버 오류가 발생했습니다.' };
    }
  };

  return <EmployeeForm mode="create" onSave={handleSave} />;
}