import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { ContractDetail } from "@/db/schema/contract" // nuqs/server 에 parseAsBoolean, parseAsNumber 등이 없다면 // 숫자/불리언으로 처리해야 할 필드도 우선 parseAsString / parseAsStringEnum 으로 받습니다. // 실제 사용 시에는 후속 로직에서 변환(예: parseFloat 등)하세요. 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 }, ]), projectCode: parseAsString.withDefault(""), projectName: parseAsString.withDefault(""), // 기존 필드 contractNo: parseAsString.withDefault(""), contractName: parseAsString.withDefault(""), status: parseAsString.withDefault(""), startDate: parseAsString.withDefault(""), // 문자열 "YYYY-MM-DD" 형태 endDate: parseAsString.withDefault(""), // 마찬가지 // 추가된 PO 관련 필드 paymentTerms: parseAsString.withDefault(""), deliveryTerms: parseAsString.withDefault(""), deliveryDate: parseAsString.withDefault(""), // "YYYY-MM-DD" deliveryLocation: parseAsString.withDefault(""), // 금액 관련 (문자열로 받고 후처리에서 parseFloat 권장) currency: parseAsString.withDefault("KRW"), totalAmount: parseAsString.withDefault(""), discount: parseAsString.withDefault(""), tax: parseAsString.withDefault(""), shippingFee: parseAsString.withDefault(""), netTotal: parseAsString.withDefault(""), // 부분 납품/결제 허용 여부 (문자열 "true"/"false") partialShippingAllowed: parseAsStringEnum(["true", "false"]).withDefault("false"), partialPaymentAllowed: parseAsStringEnum(["true", "false"]).withDefault("false"), remarks: parseAsString.withDefault(""), version: parseAsString.withDefault(""), // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 최종 타입 export type GetPOSchema = Awaited>