'use client';

import { useMemo } from 'react';
import { DynamicFormData, ItemType, StructuredFieldConfig, ItemFieldResponse } from '../types';

/**
 * 부품 유형 탐지 결과
 */
export interface PartTypeDetectionResult {
  /** 부품 유형 필드 키 (예: 'part_type') */
  partTypeFieldKey: string;
  /** 현재 선택된 부품 유형 값 (예: '절곡 부품') */
  selectedPartType: string;
  /** 절곡 부품 여부 */
  isBendingPart: boolean;
  /** 조립 부품 여부 */
  isAssemblyPart: boolean;
  /** 구매 부품 여부 */
  isPurchasedPart: boolean;
}

/**
 * useFieldDetection 훅 입력 파라미터
 */
export interface UseFieldDetectionParams {
  /** 폼 구조 정보 */
  structure: StructuredFieldConfig | null;
  /** 현재 선택된 품목 유형 (FG, PT, SM, RM, CS) */
  selectedItemType: ItemType | '';
  /** 현재 폼 데이터 */
  formData: DynamicFormData;
}

/**
 * useFieldDetection 훅 반환 타입
 */
export interface FieldDetectionResult extends PartTypeDetectionResult {
  /** BOM 필요 체크박스 필드 키 */
  bomRequiredFieldKey: string;
}

/**
 * 필드 탐지 커스텀 훅
 *
 * 폼 구조에서 특정 필드들을 탐지합니다:
 * 1. PT 품목의 부품 유형 필드 (절곡/조립/구매 부품 판별)
 * 2. BOM 필요 체크박스 필드
 *
 * @param params - 훅 입력 파라미터
 * @returns 필드 탐지 결과
 */
export function useFieldDetection({
  structure,
  selectedItemType,
  formData,
}: UseFieldDetectionParams): FieldDetectionResult {
  // 부품 유형 필드 탐지 (PT 품목에서 절곡/조립/구매 부품 판별용)
  const { partTypeFieldKey, selectedPartType, isBendingPart, isAssemblyPart, isPurchasedPart } = useMemo(() => {
    if (!structure || selectedItemType !== 'PT') {
      return {
        partTypeFieldKey: '',
        selectedPartType: '',
        isBendingPart: false,
        isAssemblyPart: false,
        isPurchasedPart: false,
      };
    }

    let foundPartTypeKey = '';

    // 모든 필드에서 부품 유형 필드 찾기
    const checkField = (fieldKey: string, field: ItemFieldResponse) => {
      const fieldName = field.field_name || '';
      // part_type, 부품유형, 부품 유형 등 탐지
      const isPartType =
        fieldKey.includes('part_type') ||
        fieldName.includes('부품유형') ||
        fieldName.includes('부품 유형');
      if (isPartType && !foundPartTypeKey) {
        foundPartTypeKey = fieldKey;
      }
    };

    structure.sections.forEach((section) => {
      section.fields.forEach((f) => {
        const key = f.field.field_key || `field_${f.field.id}`;
        checkField(key, f.field);
      });
    });

    structure.directFields.forEach((f) => {
      const key = f.field.field_key || `field_${f.field.id}`;
      checkField(key, f.field);
    });

    const currentPartType = (formData[foundPartTypeKey] as string) || '';
    // "절곡 부품", "BENDING", "절곡부품" 등 다양한 형태 지원
    const isBending = currentPartType.includes('절곡') || currentPartType.toUpperCase() === 'BENDING';
    // "조립 부품", "ASSEMBLY", "조립부품" 등 다양한 형태 지원
    const isAssembly = currentPartType.includes('조립') || currentPartType.toUpperCase() === 'ASSEMBLY';
    // "구매 부품", "PURCHASED", "구매부품" 등 다양한 형태 지원
    const isPurchased = currentPartType.includes('구매') || currentPartType.toUpperCase() === 'PURCHASED';

    //
    return {
      partTypeFieldKey: foundPartTypeKey,
      selectedPartType: currentPartType,
      isBendingPart: isBending,
      isAssemblyPart: isAssembly,
      isPurchasedPart: isPurchased,
    };
  }, [structure, selectedItemType, formData]);

  // BOM 필요 체크박스 필드 키 탐지 (structure에서 직접 검색)
  const bomRequiredFieldKey = useMemo(() => {
    if (!structure) return '';

    // 모든 섹션의 필드에서 BOM 관련 체크박스 필드 찾기
    for (const section of structure.sections) {
      for (const f of section.fields) {
        const field = f.field;
        const fieldKey = field.field_key || '';
        const fieldName = field.field_name || '';
        const fieldType = field.field_type || '';

        // 체크박스 타입이고 BOM 관련 필드인지 확인
        const isCheckbox = fieldType.toLowerCase() === 'checkbox' || fieldType.toLowerCase() === 'boolean';
        const isBomRelated =
          fieldKey.toLowerCase().includes('bom') ||
          fieldName.toLowerCase().includes('bom') ||
          fieldName.includes('부품구성') ||
          fieldKey.includes('부품구성');

        if (isCheckbox && isBomRelated) {
          //          return field.field_key || `field_${field.id}`;
        }
      }
    }

    // 직접 필드에서도 찾기
    for (const f of structure.directFields) {
      const field = f.field;
      const fieldKey = field.field_key || '';
      const fieldName = field.field_name || '';
      const fieldType = field.field_type || '';

      const isCheckbox = fieldType.toLowerCase() === 'checkbox' || fieldType.toLowerCase() === 'boolean';
      const isBomRelated =
        fieldKey.toLowerCase().includes('bom') ||
        fieldName.toLowerCase().includes('bom') ||
        fieldName.includes('부품구성') ||
        fieldKey.includes('부품구성');

      if (isCheckbox && isBomRelated) {
        //        return field.field_key || `field_${field.id}`;
      }
    }

    return '';
  }, [structure]);

  return {
    partTypeFieldKey,
    selectedPartType,
    isBendingPart,
    isAssemblyPart,
    isPurchasedPart,
    bomRequiredFieldKey,
  };
}