import type { StatusBadgeConfig } from "@/types/common";
import {
  getBookingStatus,
  getRefundStatus,
  getExamStatus,
  getCareerStatus,
  getLeaderReportStatus,
  getTripStatus,
} from "@/lib/utils/status";
import type {
  BookingStatus,
  RefundStatus,
  ExamStatus,
  CareerStatus,
  LeaderReportStatus,
} from "@/types/common";
import type { TripStatus } from "@/types/trip";

type StatusType =
  | { type: "booking"; status: BookingStatus }
  | { type: "refund"; status: RefundStatus }
  | { type: "exam"; status: ExamStatus }
  | { type: "career"; status: CareerStatus }
  | { type: "leaderReport"; status: LeaderReportStatus }
  | { type: "trip"; status: TripStatus };

interface StatusBadgeProps {
  statusType: StatusType;
  className?: string;
}

const variantClass: Record<StatusBadgeConfig["variant"], string> = {
  success: "badge-success",
  warning: "badge-warning",
  danger:  "badge-danger",
  info:    "badge-info",
  primary: "badge-primary",
  neutral: "badge-neutral",
};

function resolve(s: StatusType): StatusBadgeConfig {
  switch (s.type) {
    case "booking": return getBookingStatus(s.status);
    case "refund":  return getRefundStatus(s.status);
    case "exam":    return getExamStatus(s.status);
    case "career":  return getCareerStatus(s.status);
    case "leaderReport": return getLeaderReportStatus(s.status);
    case "trip":    return getTripStatus(s.status);
  }
}

export default function StatusBadge({ statusType, className = "" }: StatusBadgeProps) {
  const { label, variant } = resolve(statusType);
  return (
    <span className={`badge ${variantClass[variant]} ${className}`}>
      {label}
    </span>
  );
}
