import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { VendorPool } from "./types" export const vendorPoolSearchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 (등재일 기준 내림차순) sort: getSortingStateParser().withDefault([ { id: "registrationDate", desc: true }, ]), // Vendor Pool 관련 필드 constructionSector: parseAsStringEnum(["조선", "해양"]).withDefault(""), // 공사부문 htDivision: parseAsStringEnum(["H", "T"]).withDefault(""), // H/T구분 designCategoryCode: parseAsString.withDefault(""), // 설계기능코드 designCategory: parseAsString.withDefault(""), // 설계기능(공종) equipBulkDivision: parseAsStringEnum(["E", "B"]).withDefault(""), // Equip/Bulk 구분 // 패키지/자재 정보 packageCode: parseAsString.withDefault(""), // 패키지 코드 packageName: parseAsString.withDefault(""), // 패키지 명 materialGroupCode: parseAsString.withDefault(""), // 자재그룹 코드 materialGroupName: parseAsString.withDefault(""), // 자재그룹 명 smCode: parseAsString.withDefault(""), // SM Code // 유사자재명 similarMaterialNamePurchase: parseAsString.withDefault(""), // 유사자재명 (구매) similarMaterialNameOther: parseAsString.withDefault(""), // 유사자재명 (구매 외) // 협력업체 정보 vendorCode: parseAsString.withDefault(""), // 협력업체 코드 vendorName: parseAsString.withDefault(""), // 협력업체 명 // 인증/상태 정보 faStatus: parseAsString.withDefault(""), // FA현황 tier: parseAsString.withDefault(""), // 등급 isAgent: parseAsStringEnum(["true", "false"]).withDefault(""), // Agent 여부 // 계약 정보 contractSignerCode: parseAsString.withDefault(""), // 계약서명주체 코드 contractSignerName: parseAsString.withDefault(""), // 계약서명주체 명 // 위치 정보 headquarterLocation: parseAsString.withDefault(""), // 본사 위치 manufacturingLocation: parseAsString.withDefault(""), // 제작/선적지 // AVL 정보 avlVendorName: parseAsString.withDefault(""), // AVL 등재업체명 similarVendorName: parseAsString.withDefault(""), // 유사업체명 hasAvl: parseAsStringEnum(["true", "false"]).withDefault(""), // AVL 존재여부 // 상태 정보 isBlacklist: parseAsStringEnum(["true", "false"]).withDefault(""), // Blacklist isBcc: parseAsStringEnum(["true", "false"]).withDefault(""), // BCC // eVCP 미등록 정보 picName: parseAsString.withDefault(""), // PIC(담당자) picEmail: parseAsString.withDefault(""), // PIC(E-mail) agentName: parseAsString.withDefault(""), // Agent(담당자) agentEmail: parseAsString.withDefault(""), // Agent(E-mail) // 실적 정보 recentQuoteNumber: parseAsString.withDefault(""), // 최근견적번호 recentOrderNumber: parseAsString.withDefault(""), // 최근발주번호 // 업데이트 히스토리 registrant: parseAsString.withDefault(""), // 등재자 lastModifier: parseAsString.withDefault(""), // 최종변경자 // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 최종 타입 export type GetVendorPoolSchema = Awaited>