/**
 * 공통 필터 프리셋
 *
 * 리스트 페이지에서 반복적으로 사용되는 필터 설정을 공통화
 * MobileFilter 및 UniversalListPage의 filterConfig에서 사용
 *
 * @example
 * import { COMMON_STATUS_FILTER, COMMON_PRIORITY_FILTER, createStatusFilter } from '@/lib/constants/filter-presets';
 *
 * const filterConfig = [
 *   COMMON_STATUS_FILTER,
 *   COMMON_PRIORITY_FILTER,
 *   createStatusFilter('approval', '승인상태', APPROVAL_STATUS_OPTIONS),
 * ];
 */

import type { FilterFieldConfig, FilterOption } from '@/components/molecules/MobileFilter';

// ============================================================
// 공통 필터 옵션
// ============================================================

/**
 * 상태 필터 옵션 (대기/진행/완료)
 */
export const STATUS_OPTIONS: readonly FilterOption[] = [
  { value: 'pending', label: '대기' },
  { value: 'in_progress', label: '진행중' },
  { value: 'completed', label: '완료' },
] as const;

/**
 * 작업 상태 필터 옵션 (작업대기/진행중/작업완료)
 */
export const WORK_STATUS_OPTIONS: readonly FilterOption[] = [
  { value: 'waiting', label: '작업대기' },
  { value: 'in_progress', label: '진행중' },
  { value: 'completed', label: '작업완료' },
] as const;

/**
 * 우선순위 필터 옵션
 */
export const PRIORITY_OPTIONS: readonly FilterOption[] = [
  { value: 'urgent', label: '긴급' },
  { value: 'priority', label: '우선' },
  { value: 'normal', label: '일반' },
] as const;

/**
 * 활성/비활성 상태 옵션
 */
export const ACTIVE_STATUS_OPTIONS: readonly FilterOption[] = [
  { value: 'active', label: '활성' },
  { value: 'inactive', label: '비활성' },
] as const;

/**
 * 승인 상태 옵션
 */
export const APPROVAL_STATUS_OPTIONS: readonly FilterOption[] = [
  { value: 'pending', label: '승인대기' },
  { value: 'approved', label: '승인완료' },
  { value: 'rejected', label: '반려' },
] as const;

/**
 * 정렬 옵션 (게시판 등)
 */
export const SORT_OPTIONS: readonly FilterOption[] = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '오래된순' },
  { value: 'views', label: '조회순' },
] as const;

/**
 * 품목 유형 옵션
 */
export const ITEM_TYPE_OPTIONS: readonly FilterOption[] = [
  { value: 'FG', label: '제품' },
  { value: 'PT', label: '부품' },
  { value: 'SM', label: '부자재' },
  { value: 'RM', label: '원자재' },
  { value: 'CS', label: '소모품' },
] as const;

/**
 * 배송 방식 옵션
 */
export const DELIVERY_METHOD_OPTIONS: readonly FilterOption[] = [
  { value: 'delivery', label: '배송' },
  { value: 'pickup', label: '픽업' },
  { value: 'direct', label: '직접배송' },
] as const;

// ============================================================
// 공통 필터 설정 (FilterFieldConfig)
// ============================================================

/**
 * 공통 상태 필터 (대기/진행/완료)
 */
export const COMMON_STATUS_FILTER: FilterFieldConfig = {
  key: 'status',
  label: '상태',
  type: 'single',
  options: STATUS_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 작업 상태 필터 (작업대기/진행중/작업완료)
 */
export const WORK_STATUS_FILTER: FilterFieldConfig = {
  key: 'status',
  label: '상태',
  type: 'single',
  options: WORK_STATUS_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 우선순위 필터
 */
export const COMMON_PRIORITY_FILTER: FilterFieldConfig = {
  key: 'priority',
  label: '우선순위',
  type: 'single',
  options: PRIORITY_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 활성/비활성 필터
 */
export const ACTIVE_STATUS_FILTER: FilterFieldConfig = {
  key: 'isActive',
  label: '상태',
  type: 'single',
  options: ACTIVE_STATUS_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 승인 상태 필터
 */
export const APPROVAL_STATUS_FILTER: FilterFieldConfig = {
  key: 'approvalStatus',
  label: '승인상태',
  type: 'single',
  options: APPROVAL_STATUS_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 정렬 필터 (게시판 등)
 */
export const SORT_FILTER: FilterFieldConfig = {
  key: 'sort',
  label: '정렬',
  type: 'single',
  options: SORT_OPTIONS,
};

/**
 * 품목 유형 필터
 */
export const ITEM_TYPE_FILTER: FilterFieldConfig = {
  key: 'itemType',
  label: '품목유형',
  type: 'single',
  options: ITEM_TYPE_OPTIONS,
  allOptionLabel: '전체',
};

/**
 * 품목 유형 다중선택 필터
 */
export const ITEM_TYPE_MULTI_FILTER: FilterFieldConfig = {
  key: 'itemTypes',
  label: '품목유형',
  type: 'multi',
  options: ITEM_TYPE_OPTIONS,
};

/**
 * 배송 방식 필터
 */
export const DELIVERY_METHOD_FILTER: FilterFieldConfig = {
  key: 'deliveryMethod',
  label: '배송방식',
  type: 'single',
  options: DELIVERY_METHOD_OPTIONS,
  allOptionLabel: '전체',
};

// ============================================================
// 필터 생성 유틸리티 함수
// ============================================================

/**
 * 커스텀 단일선택 필터 생성
 *
 * @param key - 필터 키
 * @param label - 필터 라벨
 * @param options - 옵션 배열
 * @param allOptionLabel - '전체' 옵션 라벨 (기본: '전체')
 */
export function createSingleFilter(
  key: string,
  label: string,
  options: readonly FilterOption[],
  allOptionLabel = '전체'
): FilterFieldConfig {
  return {
    key,
    label,
    type: 'single',
    options,
    allOptionLabel,
  };
}

/**
 * 커스텀 다중선택 필터 생성
 *
 * @param key - 필터 키
 * @param label - 필터 라벨
 * @param options - 옵션 배열
 */
export function createMultiFilter(
  key: string,
  label: string,
  options: readonly FilterOption[]
): FilterFieldConfig {
  return {
    key,
    label,
    type: 'multi',
    options,
  };
}

/**
 * API 응답에서 필터 옵션 생성
 *
 * @param items - API 응답 아이템 배열
 * @param valueKey - value로 사용할 키
 * @param labelKey - label로 사용할 키
 */
export function createOptionsFromApi<T extends Record<string, unknown>>(
  items: T[],
  valueKey: keyof T,
  labelKey: keyof T
): FilterOption[] {
  return items.map((item) => ({
    value: String(item[valueKey]),
    label: String(item[labelKey]),
  }));
}

// ============================================================
// 초기 필터 값 헬퍼
// ============================================================

/**
 * 기본 필터 초기값 생성
 *
 * @param filters - 필터 설정 배열
 * @returns 초기값 객체 (single: 'all', multi: [])
 */
export function createInitialFilterValues(
  filters: FilterFieldConfig[]
): Record<string, string | string[]> {
  const values: Record<string, string | string[]> = {};

  for (const filter of filters) {
    if (filter.type === 'single') {
      values[filter.key] = 'all';
    } else {
      values[filter.key] = [];
    }
  }

  return values;
}
