import { FRAUD_QUEUE_FILTERS_DEFAULT } from '@/features/admin-affiliates/FraudEventQueue';
import type { UrlCodec } from '@/lib/url/useUrlFilterState';

export interface FraudDashboardUrlState extends Record<string, unknown> {
  decision_point: string;
  action: string;
  adapter: string;
  status: 'unresolved' | 'all';
}

function parseStatus(raw: string | null): FraudDashboardUrlState['status'] {
  return raw === 'all' ? 'all' : 'unresolved';
}

export function makeFraudDashboardCodec(basePath: string): UrlCodec<FraudDashboardUrlState> {
  return {
    parse(loc) {
      const sp = new URLSearchParams(loc.search);
      return {
        decision_point: sp.get('decision_point') ?? FRAUD_QUEUE_FILTERS_DEFAULT.decision_point,
        action: sp.get('action') ?? FRAUD_QUEUE_FILTERS_DEFAULT.action,
        adapter: sp.get('adapter') ?? FRAUD_QUEUE_FILTERS_DEFAULT.adapter,
        status: parseStatus(sp.get('status')),
      };
    },

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