"use client";

import React from "react";
import { Button } from "@/components/ui/button";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Badge } from "@/components/ui/badge";
import { Trash2 } from "lucide-react";
import { NumberingRulePart, CodePartType, GenerationMethod, CODE_PART_TYPE_OPTIONS } from "@/types/numbering-rule";
import { AutoConfigPanel } from "./AutoConfigPanel";
import { ManualConfigPanel } from "./ManualConfigPanel";

interface NumberingRuleCardProps {
  part: NumberingRulePart;
  onUpdate: (updates: Partial<NumberingRulePart>) => void;
  onDelete: () => void;
  isPreview?: boolean;
  tableName?: string;
}

export const NumberingRuleCard: React.FC<NumberingRuleCardProps> = ({
  part,
  onUpdate,
  onDelete,
  isPreview = false,
  tableName,
}) => {
  return (
    <div className="config-field flex-1 rounded-[8px] border border-border bg-muted/50 px-3 py-3 sm:px-4 sm:py-4">
      <div className="mb-3 flex items-center justify-between sm:mb-4">
        <Badge variant="outline" className="text-xs sm:text-sm">
          규칙 {part.order}
        </Badge>
        <Button
          variant="destructive"
          size="icon"
          onClick={onDelete}
          className="h-7 w-7 sm:h-8 sm:w-8"
          disabled={isPreview}
          aria-label="규칙 삭제"
        >
          <Trash2 className="h-3 w-3 sm:h-4 sm:w-4" />
        </Button>
      </div>

      <div className="space-y-3 sm:space-y-4">
        <div>
          <Label className="text-xs font-medium sm:text-sm">구분 유형</Label>
          <Select
            value={part.partType}
            onValueChange={(value) => {
              const newPartType = value as CodePartType;
              // 타입 변경 시 해당 타입의 기본 autoConfig 설정
              const defaultAutoConfig: Record<string, any> = {
                sequence: { sequenceLength: 3, startFrom: 1 },
                number: { numberLength: 4, numberValue: 1 },
                date: { dateFormat: "YYYYMMDD" },
                text: { textValue: "CODE" },
                category: { categoryKey: "", categoryMappings: [] },
                reference: { referenceColumnName: "" },
              };
              onUpdate({ 
                partType: newPartType, 
                autoConfig: defaultAutoConfig[newPartType] || {} 
              });
            }}
            disabled={isPreview}
          >
            <SelectTrigger className="h-8 text-xs sm:h-10 sm:text-sm">
              <SelectValue />
            </SelectTrigger>
            <SelectContent>
              {CODE_PART_TYPE_OPTIONS.map((option) => (
                <SelectItem key={option.value} value={option.value} className="text-xs sm:text-sm">
                  {option.label}
                </SelectItem>
              ))}
            </SelectContent>
          </Select>
        </div>

        <div>
          <Label className="text-xs font-medium sm:text-sm">생성 방식</Label>
          <Select
            value={part.generationMethod}
            onValueChange={(value) => onUpdate({ generationMethod: value as GenerationMethod })}
            disabled={isPreview}
          >
            <SelectTrigger className="h-8 text-xs sm:h-10 sm:text-sm">
              <SelectValue />
            </SelectTrigger>
            <SelectContent>
              <SelectItem value="auto" className="text-xs sm:text-sm">
                자동 생성
              </SelectItem>
              <SelectItem value="manual" className="text-xs sm:text-sm">
                직접 입력
              </SelectItem>
            </SelectContent>
          </Select>
        </div>

        {part.generationMethod === "auto" ? (
          <AutoConfigPanel
            partType={part.partType}
            config={part.autoConfig}
            onChange={(autoConfig) => onUpdate({ autoConfig })}
            isPreview={isPreview}
            tableName={tableName}
          />
        ) : (
          <ManualConfigPanel
            config={part.manualConfig}
            onChange={(manualConfig) => onUpdate({ manualConfig })}
            isPreview={isPreview}
          />
        )}
      </div>
    </div>
  );
};
