/**
 * 품목 관리 페이지
 *
 * 품목기준관리 API 연동
 * - 품목 목록: API에서 조회
 * - 테이블 컬럼: custom-tabs API에서 동적 구성
 * - ?mode=new: 등록 화면으로 전환
 */

'use client';

import { useSearchParams } from 'next/navigation';
import ItemListClient from '@/components/items/ItemListClient';
import DynamicItemForm from '@/components/items/DynamicItemForm';
import type { DynamicFormData } from '@/components/items/DynamicItemForm/types';
import { DuplicateCodeError } from '@/lib/api/error-handler';
import { useState } from 'react';

/**
 * 품목 목록 페이지 (mode=new 시 등록 화면)
 */
export default function ItemsPage() {
  const searchParams = useSearchParams();
  const mode = searchParams.get('mode');

  // mode=new 일 때 등록 화면 렌더링
  if (mode === 'new') {
    return <CreateItemContent />;
  }

  return <ItemListClient />;
}

/**
 * 품목 등록 컴포넌트 (mode=new용)
 */
function CreateItemContent() {
  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;
    }

    // item_type 설정
    const itemType = submitData.product_type as string;
    submitData.item_type = itemType;

    // 이미지 데이터 제거 (파일 업로드는 별도 API 사용)
    if (submitData.bending_diagram && typeof submitData.bending_diagram === 'string' && (submitData.bending_diagram as string).startsWith('data:')) {
      delete submitData.bending_diagram;
    }
    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
    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) {
      if (response.status === 400 && result.duplicate_id) {
        throw new DuplicateCodeError(
          result.message || '해당 품목코드가 이미 존재합니다.',
          result.duplicate_id,
          result.duplicate_code
        );
      }

      const errorMessage = result.message || '품목 등록에 실패했습니다.';
      setSubmitError(errorMessage);
      throw new Error(errorMessage);
    }

    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>
  );
}

