"use client";

import { useState } from "react";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Plus, ArrowLeft, ArrowRight, Circle } from "lucide-react";
import ScreenList from "@/components/screen/ScreenList";
import ScreenDesigner from "@/components/screen/ScreenDesigner";
import TemplateManager from "@/components/screen/TemplateManager";
import { ScreenDefinition } from "@/types/screen";

// 단계별 진행을 위한 타입 정의
type Step = "list" | "design" | "template";

export default function ScreenManagementPage() {
  const [currentStep, setCurrentStep] = useState<Step>("list");
  const [selectedScreen, setSelectedScreen] = useState<ScreenDefinition | null>(null);
  const [stepHistory, setStepHistory] = useState<Step[]>(["list"]);

  // 단계별 제목과 설명
  const stepConfig = {
    list: {
      title: "화면 목록 관리",
      description: "생성된 화면들을 확인하고 관리하세요",
      icon: "📋",
    },
    design: {
      title: "화면 설계",
      description: "드래그앤드롭으로 화면을 설계하세요",
      icon: "🎨",
    },
    template: {
      title: "템플릿 관리",
      description: "화면 템플릿을 관리하고 재사용하세요",
      icon: "📝",
    },
  };

  // 다음 단계로 이동
  const goToNextStep = (nextStep: Step) => {
    setStepHistory((prev) => [...prev, nextStep]);
    setCurrentStep(nextStep);
  };

  // 이전 단계로 이동
  const goToPreviousStep = () => {
    if (stepHistory.length > 1) {
      const newHistory = stepHistory.slice(0, -1);
      const previousStep = newHistory[newHistory.length - 1];
      setStepHistory(newHistory);
      setCurrentStep(previousStep);
    }
  };

  // 특정 단계로 이동
  const goToStep = (step: Step) => {
    setCurrentStep(step);
    // 해당 단계까지의 히스토리만 유지
    const stepIndex = stepHistory.findIndex((s) => s === step);
    if (stepIndex !== -1) {
      setStepHistory(stepHistory.slice(0, stepIndex + 1));
    }
  };

  // 현재 단계가 마지막 단계인지 확인
  const isLastStep = currentStep === "template";

  return (
    <div className="flex h-full w-full flex-col">
      {/* 단계별 내용 */}
      <div className="flex-1 overflow-hidden">
        {/* 화면 목록 단계 */}
        {currentStep === "list" && (
          <div className="h-full p-6">
            <div className="mb-6 flex items-center justify-between">
              <h2 className="text-2xl font-bold">{stepConfig.list.title}</h2>
              <Button className="bg-blue-600 hover:bg-blue-700" onClick={() => goToNextStep("design")}>
                화면 설계하기 <ArrowRight className="ml-2 h-4 w-4" />
              </Button>
            </div>
            <ScreenList
              onScreenSelect={setSelectedScreen}
              selectedScreen={selectedScreen}
              onDesignScreen={(screen) => {
                setSelectedScreen(screen);
                goToNextStep("design");
              }}
            />
          </div>
        )}

        {/* 화면 설계 단계 */}
        {currentStep === "design" && (
          <div className="h-full">
            <ScreenDesigner selectedScreen={selectedScreen} onBackToList={() => goToStep("list")} />
          </div>
        )}

        {/* 템플릿 관리 단계 */}
        {currentStep === "template" && (
          <div className="h-full p-6">
            <div className="mb-6 flex items-center justify-between">
              <h2 className="text-2xl font-bold">{stepConfig.template.title}</h2>
              <div className="flex gap-2">
                <Button variant="outline" onClick={goToPreviousStep}>
                  <ArrowLeft className="mr-2 h-4 w-4" />
                  이전 단계
                </Button>
                <Button className="bg-blue-600 hover:bg-blue-700" onClick={() => goToStep("list")}>
                  목록으로 돌아가기
                </Button>
              </div>
            </div>
            <TemplateManager selectedScreen={selectedScreen} onBackToList={() => goToStep("list")} />
          </div>
        )}
      </div>
    </div>
  );
}
