import { AlertTriangle, BadgePercent, Bell, CalendarCheck, CalendarX, CircleDollarSign, FileWarning, LogIn, LogOut, Receipt, ShieldAlert, Sparkles, Wrench, ListChecks, IdCard, Pencil } from "lucide-react";
import { cn } from "@/lib/utils";

const MAP: Record<string, { icon: React.ComponentType<{ className?: string }>; cls: string }> = {
  NEW_RESERVATION: { icon: CalendarCheck, cls: "bg-brand-50 text-brand-700 dark:bg-brand-500/10 dark:text-brand-300" },
  RESERVATION_MODIFIED: { icon: Pencil, cls: "bg-info-50 text-info-600 dark:bg-info-500/10" },
  RESERVATION_CANCELLED: { icon: CalendarX, cls: "bg-negative-50 text-negative-600 dark:bg-negative-500/10" },
  PRICE_CHANGED: { icon: CircleDollarSign, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  UPCOMING_CHECKIN: { icon: LogIn, cls: "bg-info-50 text-info-600 dark:bg-info-500/10" },
  UPCOMING_CHECKOUT: { icon: LogOut, cls: "bg-surface-2 text-fg-muted" },
  PAYMENT_DUE: { icon: CircleDollarSign, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  PAYMENT_RECORDED: { icon: CircleDollarSign, cls: "bg-positive-50 text-positive-600 dark:bg-positive-500/10" },
  CONTRACT_MISSING: { icon: FileWarning, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  CUSTOMER_ID_MISSING: { icon: IdCard, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  APARTMENT_NEEDS_CLEANING: { icon: Sparkles, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  CLEANING_COMPLETED: { icon: Sparkles, cls: "bg-positive-50 text-positive-600 dark:bg-positive-500/10" },
  MAINTENANCE_ALERT: { icon: Wrench, cls: "bg-negative-50 text-negative-600 dark:bg-negative-500/10" },
  NEW_EXPENSE: { icon: Receipt, cls: "bg-surface-2 text-fg-muted" },
  TASK_ASSIGNED: { icon: ListChecks, cls: "bg-info-50 text-info-600 dark:bg-info-500/10" },
  WORKER_ACTIVITY: { icon: AlertTriangle, cls: "bg-warning-50 text-warning-600 dark:bg-warning-500/10" },
  COMMISSION_CREATED: { icon: BadgePercent, cls: "bg-brand-50 text-brand-700 dark:bg-brand-500/10 dark:text-brand-300" },
  COMMISSION_APPROVED: { icon: BadgePercent, cls: "bg-info-50 text-info-600 dark:bg-info-500/10" },
  COMMISSION_PAID: { icon: BadgePercent, cls: "bg-positive-50 text-positive-600 dark:bg-positive-500/10" },
  SECURITY_ALERT: { icon: ShieldAlert, cls: "bg-negative-50 text-negative-600 dark:bg-negative-500/10" },
};

export function NotificationIcon({ type, priority, className }: { type: string; priority?: string; className?: string }) {
  const m = MAP[type] ?? { icon: Bell, cls: "bg-surface-2 text-fg-muted" };
  const I = m.icon;
  return (
    <span className={cn("relative flex size-9 shrink-0 items-center justify-center rounded-full", m.cls, className)}>
      <I className="size-4" />
      {priority === "CRITICAL" || priority === "HIGH" ? <span className={cn("absolute -right-0.5 -top-0.5 size-2.5 rounded-full ring-2 ring-surface", priority === "CRITICAL" ? "bg-negative-500" : "bg-warning-500")} /> : null}
    </span>
  );
}
