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

export type CategoryMgmtTab = 'CATEGORIES' | 'BUSINESS_TYPES';

const DEFAULT_TAB: CategoryMgmtTab = 'CATEGORIES';

const URL_TO_TAB: Record<string, CategoryMgmtTab> = {
  categories: 'CATEGORIES',
  'business-types': 'BUSINESS_TYPES',
};

const TAB_TO_URL: Record<CategoryMgmtTab, string> = {
  CATEGORIES: 'categories',
  BUSINESS_TYPES: 'business-types',
};

function parseTab(raw: string | null): CategoryMgmtTab {
  if (raw && URL_TO_TAB[raw]) return URL_TO_TAB[raw]!;
  return DEFAULT_TAB;
}

export interface CategoryMgmtUrlState extends Record<string, unknown> {
  tab: CategoryMgmtTab;
}

export function makeCategoryMgmtCodec(basePath: string): UrlCodec<CategoryMgmtUrlState> {
  return {
    parse(loc) {
      const sp = new URLSearchParams(loc.search);
      return { tab: parseTab(sp.get('tab')) };
    },

    build(state) {
      const sp = new URLSearchParams();
      if (state.tab !== DEFAULT_TAB) sp.set('tab', TAB_TO_URL[state.tab]);
      const qs = sp.toString();
      return qs ? `${basePath}?${qs}` : basePath;
    },
  };
}
