"use client";

import React from "react";
import {
  Dialog,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
} from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { CheckCircle, XCircle, AlertTriangle, Info } from "lucide-react";

export type AlertType = "success" | "error" | "warning" | "info";

interface AlertModalProps {
  isOpen: boolean;
  onClose: () => void;
  type: AlertType;
  title: string;
  message: string;
  confirmText?: string;
  onConfirm?: () => void;
}

const alertConfig = {
  success: {
    icon: CheckCircle,
    iconColor: "text-emerald-500",
    titleColor: "text-emerald-700",
    buttonVariant: "default" as const,
  },
  error: {
    icon: XCircle,
    iconColor: "text-destructive",
    titleColor: "text-destructive",
    buttonVariant: "destructive" as const,
  },
  warning: {
    icon: AlertTriangle,
    iconColor: "text-amber-500",
    titleColor: "text-yellow-700",
    buttonVariant: "default" as const,
  },
  info: {
    icon: Info,
    iconColor: "text-primary",
    titleColor: "text-primary",
    buttonVariant: "default" as const,
  },
};

export function AlertModal({
  isOpen,
  onClose,
  type,
  title,
  message,
  confirmText = "확인",
  onConfirm,
}: AlertModalProps) {
  const config = alertConfig[type];
  const IconComponent = config.icon;

  const handleConfirm = () => {
    if (onConfirm) {
      onConfirm();
    }
    onClose();
  };

  return (
    <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>
      <DialogContent className="sm:max-w-md">
        <DialogHeader>
          <div className="mb-2 flex items-center gap-3">
            <IconComponent className={`h-6 w-6 ${config.iconColor}`} />
            <DialogTitle className={config.titleColor}>{title}</DialogTitle>
          </div>
          <DialogDescription className="text-left">{message}</DialogDescription>
        </DialogHeader>

        <DialogFooter>
          <Button onClick={handleConfirm} className="w-full">
            {confirmText}
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}

// 편의를 위한 래퍼 함수들
export const SuccessModal = (props: Omit<AlertModalProps, "type">) => <AlertModal {...props} type="success" />;

export const ErrorModal = (props: Omit<AlertModalProps, "type">) => <AlertModal {...props} type="error" />;

export const WarningModal = (props: Omit<AlertModalProps, "type">) => <AlertModal {...props} type="warning" />;

export const InfoModal = (props: Omit<AlertModalProps, "type">) => <AlertModal {...props} type="info" />;
