import type { ItemMasterField } from "./contexts/DataContext";

/**
 * 품목기준관리에서 필드의 옵션 값 가져오기
 * optionMapping이 있으면 매핑된 표시명을 반환, 없으면 options를 그대로 반환
 */
export function getFieldOptions(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): string[] {
  const field = itemMasterFields.find(f => f.fieldKey === fieldKey && f.isActive);
  if (!field) return [];
  
  // optionMapping이 있으면 value를 그대로 반환 (매핑은 DynamicSelectField에서 처리)
  return field.property.options || [];
}

/**
 * 옵션 value-label 매핑 정보 가져오기
 */
export function getFieldOptionMapping(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): { [key: string]: string } | undefined {
  const field = itemMasterFields.find(f => f.fieldKey === fieldKey && f.isActive);
  if (!field) return undefined;
  
  return field.property.optionMapping;
}

/**
 * 특정 카테고리의 필드 옵션 값 가져오기
 */
export function getFieldOptionsByCategory(
  itemMasterFields: ItemMasterField[],
  fieldKey: string,
  category?: string
): string[] {
  const field = itemMasterFields.find(f => 
    f.fieldKey === fieldKey && 
    f.isActive && 
    (!category || f.category === category)
  );
  if (!field) return [];
  
  return field.property.options || [];
}

/**
 * 여러 필드의 옵션을 한번에 가져오기
 */
export function getMultipleFieldOptions(
  itemMasterFields: ItemMasterField[],
  fieldKeys: string[]
): Record<string, string[]> {
  const result: Record<string, string[]> = {};
  
  fieldKeys.forEach(key => {
    result[key] = getFieldOptions(itemMasterFields, key);
  });
  
  return result;
}

/**
 * 필드 옵션이 존재하는지 확인
 */
export function hasFieldOptions(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): boolean {
  const options = getFieldOptions(itemMasterFields, fieldKey);
  return options.length > 0;
}

/**
 * 필드의 입력방식 가져오기
 */
export function getFieldInputType(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): 'textbox' | 'dropdown' | 'checkbox' | 'number' | 'date' | 'textarea' | 'section' | null {
  const field = itemMasterFields.find(f => f.fieldKey === fieldKey && f.isActive);
  if (!field) return null;
  
  return field.property.inputType;
}

/**
 * 필드의 필수 여부 가져오기
 */
export function isFieldRequired(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): boolean {
  const field = itemMasterFields.find(f => f.fieldKey === fieldKey && f.isActive);
  if (!field) return false;
  
  return field.property.required;
}

/**
 * 품목기준관리 필드 정보 전체 가져오기
 */
export function getFieldInfo(
  itemMasterFields: ItemMasterField[],
  fieldKey: string
): ItemMasterField | null {
  return itemMasterFields.find(f => f.fieldKey === fieldKey && f.isActive) || null;
}

/**
 * 품목유형별 모든 필드 옵션 가져오기
 */
export function getAllFieldOptionsForItemType(
  itemMasterFields: ItemMasterField[],
  itemType: 'FG' | 'PT' | 'SM' | 'RM' | 'CS',
  partType?: 'ASSEMBLY' | 'BENDING' | 'PURCHASED'
): Record<string, string[]> {
  const result: Record<string, string[]> = {};
  
  // 공통 필드
  const commonFields = itemMasterFields.filter(f => 
    f.isActive && f.category === '공통'
  );
  
  // 품목유형별 필드
  let typeFields: ItemMasterField[] = [];
  
  if (itemType === 'FG') {
    typeFields = itemMasterFields.filter(f => 
      f.isActive && f.category === '제품'
    );
  } else if (itemType === 'PT') {
    if (partType === 'ASSEMBLY') {
      typeFields = itemMasterFields.filter(f => 
        f.isActive && f.category === '부품-조립'
      );
    } else if (partType === 'BENDING') {
      typeFields = itemMasterFields.filter(f => 
        f.isActive && f.category === '부품-절곡'
      );
    } else {
      typeFields = itemMasterFields.filter(f => 
        f.isActive && f.category?.startsWith('부품')
      );
    }
  }
  
  // 모든 필드의 옵션 수집
  [...commonFields, ...typeFields].forEach(field => {
    if (field.property.options && field.property.options.length > 0) {
      result[field.fieldKey] = field.property.options;
    }
  });
  
  return result;
}