import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { POADetail } from "@/db/schema/contract" export const searchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 (createdAt 기준 내림차순) sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), // 원본 PO 관련 contractNo: parseAsString.withDefault(""), originalContractName: parseAsString.withDefault(""), originalStatus: parseAsString.withDefault(""), originalStartDate: parseAsString.withDefault(""), originalEndDate: parseAsString.withDefault(""), // 프로젝트 정보 projectId: parseAsString.withDefault(""), projectCode: parseAsString.withDefault(""), projectName: parseAsString.withDefault(""), // 벤더 정보 vendorId: parseAsString.withDefault(""), vendorName: parseAsString.withDefault(""), // 납품 관련 deliveryTerms: parseAsString.withDefault(""), deliveryDate: parseAsString.withDefault(""), deliveryLocation: parseAsString.withDefault(""), // 금액 관련 currency: parseAsString.withDefault(""), totalAmount: parseAsString.withDefault(""), discount: parseAsString.withDefault(""), tax: parseAsString.withDefault(""), shippingFee: parseAsString.withDefault(""), netTotal: parseAsString.withDefault(""), // 변경 사유 및 승인 상태 changeReason: parseAsString.withDefault(""), approvalStatus: parseAsString.withDefault(""), // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 최종 타입 export type GetChangeOrderSchema = Awaited>