import {
  ShoppingCart, UtensilsCrossed, Car, Home, Zap, Clapperboard, HeartPulse, ShoppingBag,
  Repeat, Plane, Banknote, CircleDashed, GraduationCap, Dumbbell, Gift, PawPrint, Baby, Wrench,
} from "lucide-react";

export type CategoryMeta = { icon: any; tint: string };

export const CATEGORY_META: Record<string, CategoryMeta> = {
  Groceries: { icon: ShoppingCart, tint: "var(--success)" },
  Dining: { icon: UtensilsCrossed, tint: "var(--warning)" },
  Transport: { icon: Car, tint: "var(--electric)" },
  Housing: { icon: Home, tint: "var(--purple)" },
  Utilities: { icon: Zap, tint: "var(--warning)" },
  Entertainment: { icon: Clapperboard, tint: "var(--purple)" },
  Health: { icon: HeartPulse, tint: "var(--destructive)" },
  Shopping: { icon: ShoppingBag, tint: "var(--electric)" },
  Subscriptions: { icon: Repeat, tint: "var(--purple)" },
  Travel: { icon: Plane, tint: "var(--electric)" },
  Education: { icon: GraduationCap, tint: "var(--electric)" },
  Fitness: { icon: Dumbbell, tint: "var(--success)" },
  Gifts: { icon: Gift, tint: "var(--purple)" },
  Pets: { icon: PawPrint, tint: "var(--warning)" },
  Kids: { icon: Baby, tint: "var(--warning)" },
  Maintenance: { icon: Wrench, tint: "var(--muted-foreground)" },
  Income: { icon: Banknote, tint: "var(--success)" },
  Other: { icon: CircleDashed, tint: "var(--muted-foreground)" },
};

export const EXPENSE_CATEGORIES = Object.keys(CATEGORY_META).filter((c) => c !== "Income");
export const ALL_CATEGORIES = Object.keys(CATEGORY_META);

export function categoryMeta(category?: string | null): CategoryMeta {
  return CATEGORY_META[category ?? "Other"] ?? CATEGORY_META.Other;
}

/** Known merchant → domain map for logo lookups; falls back to a slugified guess. */
const MERCHANT_DOMAINS: Record<string, string> = {
  amazon: "amazon.com", netflix: "netflix.com", spotify: "spotify.com", uber: "uber.com",
  lyft: "lyft.com", starbucks: "starbucks.com", apple: "apple.com", "apple store": "apple.com",
  google: "google.com", airbnb: "airbnb.com", "whole foods": "wholefoodsmarket.com",
  target: "target.com", walmart: "walmart.com", costco: "costco.com", ikea: "ikea.com",
  nike: "nike.com", zara: "zara.com", "trader joe's": "traderjoes.com", shell: "shell.com",
  delta: "delta.com", "united airlines": "united.com", doordash: "doordash.com",
  instacart: "instacart.com", chipotle: "chipotle.com", "mcdonald's": "mcdonalds.com",
  disney: "disney.com", "disney+": "disneyplus.com", hulu: "hulu.com", steam: "steampowered.com",
  openai: "openai.com", notion: "notion.so", figma: "figma.com", github: "github.com",
};

export function merchantLogoUrl(merchant?: string | null): string | null {
  if (!merchant) return null;
  const key = merchant.trim().toLowerCase();
  const domain = MERCHANT_DOMAINS[key] ?? (/^[a-z0-9 &'.-]{2,24}$/.test(key) ? `${key.replace(/[^a-z0-9]/g, "")}.com` : null);
  if (!domain) return null;
  return `https://logo.clearbit.com/${domain}`;
}

export function initials(text?: string | null) {
  if (!text) return "•";
  return text
    .trim()
    .split(/\s+/)
    .slice(0, 2)
    .map((w) => w[0])
    .join("")
    .toUpperCase();
}
