const { PrismaClient } = require("@prisma/client");

const prisma = new PrismaClient();

// 실제 UI 구성에 필요한 컴포넌트들
const uiComponents = [
  // === 액션 컴포넌트 ===
  {
    component_code: "button-primary",
    component_name: "기본 버튼",
    component_name_eng: "Primary Button",
    description: "일반적인 액션을 위한 기본 버튼 컴포넌트",
    category: "action",
    icon_name: "MousePointer",
    default_size: { width: 100, height: 36 },
    component_config: {
      type: "button",
      variant: "primary",
      text: "버튼",
      action: "custom",
      style: {
        backgroundColor: "#3b82f6",
        color: "#ffffff",
        borderRadius: "6px",
        fontSize: "14px",
        fontWeight: "500",
      },
    },
    sort_order: 10,
  },
  {
    component_code: "button-secondary",
    component_name: "보조 버튼",
    component_name_eng: "Secondary Button",
    description: "보조 액션을 위한 버튼 컴포넌트",
    category: "action",
    icon_name: "MousePointer",
    default_size: { width: 100, height: 36 },
    component_config: {
      type: "button",
      variant: "secondary",
      text: "취소",
      action: "cancel",
      style: {
        backgroundColor: "#f1f5f9",
        color: "#475569",
        borderRadius: "6px",
        fontSize: "14px",
      },
    },
    sort_order: 11,
  },

  // === 레이아웃 컴포넌트 ===
  {
    component_code: "card-basic",
    component_name: "기본 카드",
    component_name_eng: "Basic Card",
    description: "정보를 그룹화하는 기본 카드 컴포넌트",
    category: "layout",
    icon_name: "Square",
    default_size: { width: 400, height: 300 },
    component_config: {
      type: "card",
      title: "카드 제목",
      showHeader: true,
      showFooter: false,
      style: {
        backgroundColor: "#ffffff",
        border: "1px solid #e5e7eb",
        borderRadius: "8px",
        padding: "16px",
        boxShadow: "0 1px 3px rgba(0, 0, 0, 0.1)",
      },
    },
    sort_order: 20,
  },
  {
    component_code: "dashboard-grid",
    component_name: "대시보드 그리드",
    component_name_eng: "Dashboard Grid",
    description: "대시보드를 위한 그리드 레이아웃 컴포넌트",
    category: "layout",
    icon_name: "LayoutGrid",
    default_size: { width: 800, height: 600 },
    component_config: {
      type: "dashboard",
      columns: 3,
      gap: 16,
      items: [],
      style: {
        backgroundColor: "#f8fafc",
        padding: "20px",
        borderRadius: "8px",
      },
    },
    sort_order: 21,
  },
  {
    component_code: "panel-collapsible",
    component_name: "접을 수 있는 패널",
    component_name_eng: "Collapsible Panel",
    description: "접고 펼칠 수 있는 패널 컴포넌트",
    category: "layout",
    icon_name: "ChevronDown",
    default_size: { width: 500, height: 200 },
    component_config: {
      type: "panel",
      title: "패널 제목",
      collapsible: true,
      defaultExpanded: true,
      style: {
        backgroundColor: "#ffffff",
        border: "1px solid #e5e7eb",
        borderRadius: "8px",
      },
    },
    sort_order: 22,
  },

  // === 데이터 표시 컴포넌트 ===
  {
    component_code: "stats-card",
    component_name: "통계 카드",
    component_name_eng: "Statistics Card",
    description: "수치와 통계를 표시하는 카드 컴포넌트",
    category: "data",
    icon_name: "BarChart3",
    default_size: { width: 250, height: 120 },
    component_config: {
      type: "stats",
      title: "총 판매량",
      value: "1,234",
      unit: "개",
      trend: "up",
      percentage: "+12.5%",
      style: {
        backgroundColor: "#ffffff",
        border: "1px solid #e5e7eb",
        borderRadius: "8px",
        padding: "20px",
      },
    },
    sort_order: 30,
  },
  {
    component_code: "progress-bar",
    component_name: "진행률 표시",
    component_name_eng: "Progress Bar",
    description: "작업 진행률을 표시하는 컴포넌트",
    category: "data",
    icon_name: "BarChart2",
    default_size: { width: 300, height: 60 },
    component_config: {
      type: "progress",
      label: "진행률",
      value: 65,
      max: 100,
      showPercentage: true,
      style: {
        backgroundColor: "#f1f5f9",
        borderRadius: "4px",
        height: "8px",
      },
    },
    sort_order: 31,
  },
  {
    component_code: "chart-basic",
    component_name: "기본 차트",
    component_name_eng: "Basic Chart",
    description: "데이터를 시각화하는 기본 차트 컴포넌트",
    category: "data",
    icon_name: "TrendingUp",
    default_size: { width: 500, height: 300 },
    component_config: {
      type: "chart",
      chartType: "line",
      title: "차트 제목",
      data: [],
      options: {
        responsive: true,
        plugins: {
          legend: { position: "top" },
        },
      },
    },
    sort_order: 32,
  },

  // === 네비게이션 컴포넌트 ===
  {
    component_code: "breadcrumb",
    component_name: "브레드크럼",
    component_name_eng: "Breadcrumb",
    description: "현재 위치를 표시하는 네비게이션 컴포넌트",
    category: "navigation",
    icon_name: "ChevronRight",
    default_size: { width: 400, height: 32 },
    component_config: {
      type: "breadcrumb",
      items: [
        { label: "홈", href: "/" },
        { label: "관리자", href: "/admin" },
        { label: "현재 페이지" },
      ],
      separator: ">",
    },
    sort_order: 40,
  },
  {
    component_code: "tabs-horizontal",
    component_name: "가로 탭",
    component_name_eng: "Horizontal Tabs",
    description: "컨텐츠를 탭으로 구분하는 네비게이션 컴포넌트",
    category: "navigation",
    icon_name: "Tabs",
    default_size: { width: 500, height: 300 },
    component_config: {
      type: "tabs",
      orientation: "horizontal",
      tabs: [
        { id: "tab1", label: "탭 1", content: "첫 번째 탭 내용" },
        { id: "tab2", label: "탭 2", content: "두 번째 탭 내용" },
      ],
      defaultTab: "tab1",
    },
    sort_order: 41,
  },
  {
    component_code: "pagination",
    component_name: "페이지네이션",
    component_name_eng: "Pagination",
    description: "페이지를 나눠서 표시하는 네비게이션 컴포넌트",
    category: "navigation",
    icon_name: "ChevronLeft",
    default_size: { width: 300, height: 40 },
    component_config: {
      type: "pagination",
      currentPage: 1,
      totalPages: 10,
      showFirst: true,
      showLast: true,
      showPrevNext: true,
    },
    sort_order: 42,
  },

  // === 피드백 컴포넌트 ===
  {
    component_code: "alert-info",
    component_name: "정보 알림",
    component_name_eng: "Info Alert",
    description: "정보를 사용자에게 알리는 컴포넌트",
    category: "feedback",
    icon_name: "Info",
    default_size: { width: 400, height: 60 },
    component_config: {
      type: "alert",
      variant: "info",
      title: "알림",
      message: "중요한 정보를 확인해주세요.",
      dismissible: true,
      icon: true,
    },
    sort_order: 50,
  },
  {
    component_code: "badge-status",
    component_name: "상태 뱃지",
    component_name_eng: "Status Badge",
    description: "상태나 카테고리를 표시하는 뱃지 컴포넌트",
    category: "feedback",
    icon_name: "Tag",
    default_size: { width: 80, height: 24 },
    component_config: {
      type: "badge",
      text: "활성",
      variant: "success",
      size: "sm",
      style: {
        backgroundColor: "#10b981",
        color: "#ffffff",
        borderRadius: "12px",
        fontSize: "12px",
      },
    },
    sort_order: 51,
  },
  {
    component_code: "loading-spinner",
    component_name: "로딩 스피너",
    component_name_eng: "Loading Spinner",
    description: "로딩 상태를 표시하는 스피너 컴포넌트",
    category: "feedback",
    icon_name: "RefreshCw",
    default_size: { width: 100, height: 100 },
    component_config: {
      type: "loading",
      variant: "spinner",
      size: "md",
      message: "로딩 중...",
      overlay: false,
    },
    sort_order: 52,
  },

  // === 입력 컴포넌트 ===
  {
    component_code: "search-box",
    component_name: "검색 박스",
    component_name_eng: "Search Box",
    description: "검색 기능이 있는 입력 컴포넌트",
    category: "input",
    icon_name: "Search",
    default_size: { width: 300, height: 40 },
    component_config: {
      type: "search",
      placeholder: "검색어를 입력하세요...",
      showButton: true,
      debounce: 500,
      style: {
        borderRadius: "20px",
        border: "1px solid #d1d5db",
      },
    },
    sort_order: 60,
  },
  {
    component_code: "filter-dropdown",
    component_name: "필터 드롭다운",
    component_name_eng: "Filter Dropdown",
    description: "데이터 필터링을 위한 드롭다운 컴포넌트",
    category: "input",
    icon_name: "Filter",
    default_size: { width: 200, height: 40 },
    component_config: {
      type: "filter",
      label: "필터",
      options: [
        { value: "all", label: "전체" },
        { value: "active", label: "활성" },
        { value: "inactive", label: "비활성" },
      ],
      defaultValue: "all",
      multiple: false,
    },
    sort_order: 61,
  },
];

async function seedUIComponents() {
  try {
    console.log("🚀 UI 컴포넌트 시딩 시작...");

    // 기존 데이터 삭제
    console.log("📝 기존 컴포넌트 데이터 삭제 중...");
    await prisma.$executeRaw`DELETE FROM component_standards`;

    // 새 컴포넌트 데이터 삽입
    console.log("📦 새로운 UI 컴포넌트 삽입 중...");

    for (const component of uiComponents) {
      await prisma.component_standards.create({
        data: {
          ...component,
          company_code: "DEFAULT",
          created_by: "system",
          updated_by: "system",
        },
      });
      console.log(`✅ ${component.component_name} 컴포넌트 생성됨`);
    }

    console.log(
      `\n🎉 총 ${uiComponents.length}개의 UI 컴포넌트가 성공적으로 생성되었습니다!`
    );

    // 카테고리별 통계
    const categoryCounts = {};
    uiComponents.forEach((component) => {
      categoryCounts[component.category] =
        (categoryCounts[component.category] || 0) + 1;
    });

    console.log("\n📊 카테고리별 컴포넌트 수:");
    Object.entries(categoryCounts).forEach(([category, count]) => {
      console.log(`   ${category}: ${count}개`);
    });
  } catch (error) {
    console.error("❌ UI 컴포넌트 시딩 실패:", error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

// 실행
if (require.main === module) {
  seedUIComponents()
    .then(() => {
      console.log("✨ UI 컴포넌트 시딩 완료!");
      process.exit(0);
    })
    .catch((error) => {
      console.error("💥 시딩 실패:", error);
      process.exit(1);
    });
}

module.exports = { seedUIComponents, uiComponents };
