import type { UrlCodec } from '@/lib/url/useUrlFilterState';

export type TicketStatusFilter = 'all' | 'open' | 'resolved' | 'closed';

const VALID_FILTERS = new Set<TicketStatusFilter>(['all', 'open', 'resolved', 'closed']);
const DEFAULT_FILTER: TicketStatusFilter = 'all';

function parseStatus(raw: string | null): TicketStatusFilter {
  if (raw && VALID_FILTERS.has(raw as TicketStatusFilter)) return raw as TicketStatusFilter;
  return DEFAULT_FILTER;
}

export interface TicketListUrlState extends Record<string, unknown> {
  status: TicketStatusFilter;
}

export function makeTicketListCodec(basePath: string): UrlCodec<TicketListUrlState> {
  return {
    parse(loc) {
      const sp = new URLSearchParams(loc.search);
      return { status: parseStatus(sp.get('status')) };
    },

    build(state) {
      const sp = new URLSearchParams();
      if (state.status !== DEFAULT_FILTER) sp.set('status', state.status);
      const qs = sp.toString();
      return qs ? `${basePath}?${qs}` : basePath;
    },
  };
}
