import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { AvlListItem, AvlDetailItem } from "./types" // AVL 리스트 검색 파라미터 캐시 export const avlListSearchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 (등재일 기준 내림차순) sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), // AVL 기본 정보 필드 isTemplate: parseAsStringEnum(["true", "false"]).withDefault(""), // 표준 AVL 여부 constructionSector: parseAsString.withDefault(""), // 공사부문 projectCode: parseAsString.withDefault(""), // 프로젝트코드 shipType: parseAsString.withDefault(""), // 선종 avlKind: parseAsString.withDefault(""), // AVL 종류 htDivision: parseAsStringEnum(["H", "T"]).withDefault(""), // H/T구분 rev: parseAsString.withDefault(""), // 리비전 // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // AVL 상세 검색 파라미터 캐시 export const avlDetailSearchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 sort: getSortingStateParser().withDefault([ { id: "no", desc: false }, ]), // AVL Vendor Info 관련 필드들 equipBulkDivision: parseAsStringEnum(["EQUIP", "BULK"]).withDefault(""), // Equip/Bulk 구분 disciplineCode: parseAsString.withDefault(""), // 설계공종코드 disciplineName: parseAsString.withDefault(""), // 설계공종명 materialNameCustomerSide: parseAsString.withDefault(""), // 고객사 AVL 자재명 packageCode: parseAsString.withDefault(""), // 패키지 코드 packageName: parseAsString.withDefault(""), // 패키지 명 materialGroupCode: parseAsString.withDefault(""), // 자재그룹 코드 materialGroupName: parseAsString.withDefault(""), // 자재그룹 명 vendorName: parseAsString.withDefault(""), // 협력업체 명 vendorCode: parseAsString.withDefault(""), // 협력업체 코드 avlVendorName: parseAsString.withDefault(""), // AVL 등재업체명 tier: parseAsString.withDefault(""), // 등급 faTarget: parseAsStringEnum(["true", "false"]).withDefault(""), // FA 대상 faStatus: parseAsString.withDefault(""), // FA 현황 isAgent: parseAsStringEnum(["true", "false"]).withDefault(""), // Agent 여부 contractSignerName: parseAsString.withDefault(""), // 계약 서명주체 headquarterLocation: parseAsString.withDefault(""), // 본사 위치 manufacturingLocation: parseAsString.withDefault(""), // 제작/선적지 hasAvl: parseAsStringEnum(["true", "false"]).withDefault(""), // AVL 존재 isBlacklist: parseAsStringEnum(["true", "false"]).withDefault(""), // Blacklist isBcc: parseAsStringEnum(["true", "false"]).withDefault(""), // BCC techQuoteNumber: parseAsString.withDefault(""), // 기술영업 견적번호 quoteCode: parseAsString.withDefault(""), // 견적서 Code quoteCountry: parseAsString.withDefault(""), // 국가 remark: parseAsString.withDefault(""), // 비고 // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 프로젝트 AVL 검색 파라미터 캐시 (프로젝트별 AVL Vendor Info) export const projectAvlSearchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 sort: getSortingStateParser().withDefault([ { id: "no", desc: false }, ]), // 필수 필터: 프로젝트 코드 projectCode: parseAsString.withDefault(""), // 추가 필터들 equipBulkDivision: parseAsStringEnum(["EQUIP", "BULK"]).withDefault(""), disciplineCode: parseAsString.withDefault(""), disciplineName: parseAsString.withDefault(""), materialNameCustomerSide: parseAsString.withDefault(""), packageCode: parseAsString.withDefault(""), packageName: parseAsString.withDefault(""), materialGroupCode: parseAsString.withDefault(""), materialGroupName: parseAsString.withDefault(""), vendorName: parseAsString.withDefault(""), vendorCode: parseAsString.withDefault(""), avlVendorName: parseAsString.withDefault(""), tier: parseAsString.withDefault(""), // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 표준 AVL 검색 파라미터 캐시 (선종별 표준 AVL Vendor Info) export const standardAvlSearchParamsCache = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 sort: getSortingStateParser().withDefault([ { id: "no", desc: false }, ]), // 필수 필터: 표준 AVL용 (공사부문, 선종, AVL종류, H/T) constructionSector: parseAsString.withDefault(""), shipType: parseAsString.withDefault(""), avlKind: parseAsString.withDefault(""), htDivision: parseAsStringEnum(["공통", "H", "T", ""]).withDefault(""), // 추가 필터들 equipBulkDivision: parseAsStringEnum(["EQUIP", "BULK", ""]).withDefault(""), disciplineCode: parseAsString.withDefault(""), disciplineName: parseAsString.withDefault(""), materialNameCustomerSide: parseAsString.withDefault(""), packageCode: parseAsString.withDefault(""), packageName: parseAsString.withDefault(""), materialGroupCode: parseAsString.withDefault(""), materialGroupName: parseAsString.withDefault(""), vendorName: parseAsString.withDefault(""), vendorCode: parseAsString.withDefault(""), avlVendorName: parseAsString.withDefault(""), tier: parseAsString.withDefault(""), // 고급 필터(Advanced) & 검색 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) // 최종 타입 추론 export type GetAvlListSchema = Awaited> export type GetAvlDetailSchema = Awaited> export type GetProjectAvlSchema = Awaited> export type GetStandardAvlSchema = Awaited>