import * as React from "react";
import { cn } from "@/lib/utils";
import {
  Users,
  GraduationCap,
  BookOpen,
  Calendar,
  ClipboardList,
  CheckCircle2,
  Clock,
  Award,
  Star,
} from "lucide-react";

const iconMap = {
  users: Users,
  teacher: GraduationCap,
  subject: BookOpen,
  calendar: Calendar,
  assignment: ClipboardList,
  check: CheckCircle2,
  clock: Clock,
  award: Award,
  star: Star,
};

export interface StatCardProps {
  title: string;
  value: string | number;
  subtitle?: string;
  iconName?: keyof typeof iconMap;
  colorScheme?: "blue" | "emerald" | "amber" | "purple" | "rose";
  trend?: string;
}

export function StatCard({
  title,
  value,
  subtitle,
  iconName = "subject",
  colorScheme = "blue",
  trend,
}: StatCardProps) {
  const Icon = iconMap[iconName] || BookOpen;

  const colorStyles = {
    blue: {
      bg: "bg-blue-50",
      text: "text-blue-600",
      border: "hover:border-blue-300",
    },
    emerald: {
      bg: "bg-emerald-50",
      text: "text-emerald-600",
      border: "hover:border-emerald-300",
    },
    amber: {
      bg: "bg-amber-50",
      text: "text-amber-600",
      border: "hover:border-amber-300",
    },
    purple: {
      bg: "bg-purple-50",
      text: "text-purple-600",
      border: "hover:border-purple-300",
    },
    rose: {
      bg: "bg-rose-50",
      text: "text-rose-600",
      border: "hover:border-rose-300",
    },
  };

  const scheme = colorStyles[colorScheme];

  return (
    <div
      className={cn(
        "rounded-2xl border border-slate-200/80 bg-white p-5 shadow-sm transition-all duration-200",
        scheme.border
      )}
    >
      <div className="flex items-center justify-between">
        <div>
          <p className="text-xs font-semibold text-slate-500">{title}</p>
          <h4 className="mt-1 text-2xl font-bold tracking-tight text-slate-900">
            {value}
          </h4>
        </div>
        <div className={cn("rounded-xl p-3", scheme.bg, scheme.text)}>
          <Icon className="h-6 w-6" />
        </div>
      </div>
      {(subtitle || trend) && (
        <div className="mt-3 flex items-center gap-2 text-xs">
          {trend && (
            <span className="font-semibold text-emerald-600 bg-emerald-50 px-1.5 py-0.5 rounded">
              {trend}
            </span>
          )}
          {subtitle && <span className="text-slate-500">{subtitle}</span>}
        </div>
      )}
    </div>
  );
}
