/**
 * 품목 등록 페이지
 *
 * DynamicItemForm을 사용하여 품목기준관리 데이터 기반 동적 폼 렌더링
 */

'use client';

import { useState } from 'react';
import DynamicItemForm from '@/components/items/DynamicItemForm';
import type { DynamicFormData } from '@/components/items/DynamicItemForm/types';
// 2025-12-16: options 관련 변환 로직 제거
// 백엔드가 품목기준관리 field_key 매핑을 처리하므로 프론트에서 변환 불필요
import { DuplicateCodeError } from '@/lib/api/error-handler';

// 기존 ItemForm (주석처리 - 롤백 시 사용)
// import ItemForm from '@/components/items/ItemForm';
// import type { CreateItemFormData } from '@/lib/utils/validation';

export default function CreateItemPage() {
  const [submitError, setSubmitError] = useState<string | null>(null);

  const handleSubmit = async (data: DynamicFormData) => {
    setSubmitError(null);

    // 필드명 변환: spec → specification (백엔드 API 규격)
    const submitData = { ...data };
    if (submitData.spec !== undefined) {
      submitData.specification = submitData.spec;
      delete submitData.spec;
    }

    // 2025-12-15: item_type은 Request Body에서 필수 (ItemService.store validation)
    // product_type과 item_type을 동일하게 설정
    const itemType = submitData.product_type as string;
    submitData.item_type = itemType;

    // API 호출 전 이미지 데이터 제거 (파일 업로드는 별도 API 사용)
    // bending_diagram이 base64 데이터인 경우 제거 (JSON에 포함시키면 안됨)
    if (submitData.bending_diagram && typeof submitData.bending_diagram === 'string' && (submitData.bending_diagram as string).startsWith('data:')) {
      delete submitData.bending_diagram;
    }
    // 시방서/인정서 파일 필드도 base64면 제거
    if (submitData.specification_file && typeof submitData.specification_file === 'string' && (submitData.specification_file as string).startsWith('data:')) {
      delete submitData.specification_file;
    }
    if (submitData.certification_file && typeof submitData.certification_file === 'string' && (submitData.certification_file as string).startsWith('data:')) {
      delete submitData.certification_file;
    }

    // API 호출: POST /api/proxy/items
    // 백엔드에서 product_type에 따라 Product/Material 분기 처리
    const response = await fetch('/api/proxy/items', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(submitData),
    });

    const result = await response.json();

    if (!response.ok || !result.success) {
      // 2025-12-11: 백엔드 중복 에러 처리 (DuplicateCodeException)
      // duplicate_id가 있으면 DuplicateCodeError throw → DynamicItemForm에서 다이얼로그 표시
      if (response.status === 400 && result.duplicate_id) {
        console.warn('[CreateItemPage] 품목코드 중복 에러:', result);
        throw new DuplicateCodeError(
          result.message || '해당 품목코드가 이미 존재합니다.',
          result.duplicate_id,
          result.duplicate_code
        );
      }

      const errorMessage = result.message || '품목 등록에 실패했습니다.';
      console.error('[CreateItemPage] 품목 등록 실패:', errorMessage);
      setSubmitError(errorMessage);
      throw new Error(errorMessage);
    }

    // 성공 시 DynamicItemForm 내부에서 /items로 리다이렉트 처리됨
    //
    // 생성된 품목 ID를 포함한 데이터 반환 (파일 업로드용)
    return { id: result.data.id, ...result.data };
  };

  return (
    <div className="p-6">
      {submitError && (
        <div className="mb-4 p-4 bg-red-50 border border-red-200 rounded-lg text-red-900">
          ⚠️ {submitError}
        </div>
      )}
      <DynamicItemForm
        mode="create"
        onSubmit={handleSubmit}
      />
    </div>
  );
}