/**코드 작성 전 TypeScript의 타입 정의 */

 /**
   * 필터 연산자 타입
   */
  export type FilterOperator =
    | 'eq'        // 같음
    | 'ne'        // 같지 않음
    | 'gt'        // 초과
    | 'gte'       // 이상
    | 'lt'        // 미만
    | 'lte'       // 이하
    | 'like'      // 포함 (문자열)
    | 'in'        // 배열 내 포함
    | 'between';  // 범위

  /**
   * 필터 조건
   */
  export interface FilterCondition {
    /** 필터링할 컬럼명 */
    field: string;

    /** 연산자 (eq,like)*/
    operator: FilterOperator;

    /** 비교 값 (between인 경우 [min, max] 배열) */
    value: any;
  }

  /**
   * 정렬 방향
   */
  export type SortOrder = 'ASC' | 'DESC';

  /**
   * 정렬 옵션
   */
  export interface SortOption {
    /** 정렬할 컬럼명 */
    field: string;

    /** 정렬 방향 */
    order: SortOrder;
  }

  /**
   * 페이지네이션 옵션
   */
  export interface PaginationOption {
    /** 페이지 번호 (1부터 시작) */
    page: number;

    /** 페이지당 아이템 수 */
    limit: number;
  }

  /**
   * FilterEngine 옵션
   * FilterEngine에 전달할 모든 옵션을 하나로 묶음
   */
  export interface FilterEngineOptions {
    /** 필터 조건 배열 */
    filters?: FilterCondition[];

    /** 정렬 옵션 배열 */
    sorts?: SortOption[];

    /** 페이지네이션 옵션 */
    pagination?: PaginationOption;
  }

  /**
   * FilterEngine 실행 결과
   */
  export interface FilterEngineResult<T> {
    /** 조회된 데이터 */
    data: T[];

    /** 전체 데이터 개수 (페이지네이션 전) */
    total: number;

    /** 현재 페이지 */
    page?: number;

    /** 페이지당 아이템 수 */
    limit?: number;

    /** 전체 페이지 수 */
    totalPages?: number;
  }