export const GEM_TYPES = [
  { value: "sapphire", label: "Sapphire" },
  { value: "ruby", label: "Ruby" },
  { value: "emerald", label: "Emerald" },
  { value: "spinel", label: "Spinel" },
  { value: "tourmaline", label: "Tourmaline" },
  { value: "garnet", label: "Garnet" },
  { value: "opal", label: "Opal" },
  { value: "diamond", label: "Diamond" },
  { value: "aquamarine", label: "Aquamarine" },
] as const;

export const GEM_ORIGINS = [
  { value: "Sri Lanka", label: "Sri Lanka" },
  { value: "Myanmar", label: "Myanmar" },
  { value: "Colombia", label: "Colombia" },
  { value: "Mozambique", label: "Mozambique" },
  { value: "Madagascar", label: "Madagascar" },
  { value: "Tanzania", label: "Tanzania" },
  { value: "Brazil", label: "Brazil" },
  { value: "Australia", label: "Australia" },
  { value: "Nigeria", label: "Nigeria" },
  { value: "Kashmir", label: "Kashmir" },
] as const;

export const TREATMENTS = [
  { value: "None", label: "None" },
  { value: "Unheated", label: "Unheated" },
  { value: "Heat", label: "Heat" },
  { value: "Minor oil", label: "Minor oil" },
] as const;

export const CERTS = [
  { value: "GIA", label: "GIA" },
  { value: "GRS", label: "GRS" },
  { value: "Gübelin", label: "Gübelin" },
  { value: "AGL", label: "AGL" },
  { value: "AIGS", label: "AIGS" },
  { value: "SSEF", label: "SSEF" },
] as const;

export const WEIGHT_BANDS = [
  { value: "under1", label: "Under 1 ct", min: 0, max: 1 },
  { value: "1-2", label: "1–2 ct", min: 1, max: 2 },
  { value: "2-3", label: "2–3 ct", min: 2, max: 3 },
  { value: "3-5", label: "3–5 ct", min: 3, max: 5 },
  { value: "5plus", label: "5 ct+", min: 5, max: 999 },
] as const;

export const PRICE_BANDS = [
  { value: "under1k", label: "Under $1k", min: 0, max: 1000 },
  { value: "1-3k", label: "$1k–$3k", min: 1000, max: 3000 },
  { value: "3-10k", label: "$3k–$10k", min: 3000, max: 10000 },
  { value: "10kplus", label: "$10k+", min: 10000, max: 9_999_999 },
] as const;

export function gemTypeLabel(value: string) {
  return GEM_TYPES.find((item) => item.value === value)?.label ?? value;
}

export function pricePerCarat(price: number, weightCt: number) {
  if (!weightCt) return 0;
  return Math.round(price / weightCt);
}

export function marketHint(price: number, low: number, high: number) {
  if (price < low) return "Below range";
  if (price > high) return "Above range";
  const mid = (low + high) / 2;
  if (price <= mid) return "In range";
  return "Upper range";
}

export const SORTS = [
  { value: "", label: "Asking" },
  { value: "ppc", label: "$/ct" },
  { value: "weight", label: "Weight" },
] as const;

export type SearchQuery = {
  q?: string;
  type?: string;
  origin?: string;
  treatment?: string;
  cert?: string;
  wt?: string;
  price?: string;
  sort?: string;
};

export function searchHref(next: SearchQuery) {
  const params = new URLSearchParams();
  if (next.q) params.set("q", next.q);
  if (next.type) params.set("type", next.type);
  if (next.origin) params.set("origin", next.origin);
  if (next.treatment) params.set("treatment", next.treatment);
  if (next.cert) params.set("cert", next.cert);
  if (next.wt) params.set("wt", next.wt);
  if (next.price) params.set("price", next.price);
  if (next.sort) params.set("sort", next.sort);
  const query = params.toString();
  return query ? `/search?${query}` : "/search";
}

export function toggleHref(current: SearchQuery, key: keyof SearchQuery, value: string) {
  return searchHref({ ...current, [key]: current[key] === value ? "" : value });
}
