import type { FormulaRule } from "./contexts/DataContext";

/**
 * 케이스(셔터박스) 산정 규칙 생성기
 * 제작사이즈(S) 기준 11개 구간별로 케이스 자재 규격 및 수량 결정
 */

export function generateCaseRules(): FormulaRule[] {
  const rules: FormulaRule[] = [];

  // 케이스 스크린용 11개 구간
  const caseScreenRanges = [
    { min: 0, max: 1219, itemCode: "CASE-SCREEN-1219", itemName: "케이스(스크린)-1219", qty: 1, desc: "1219mm 단일" },
    { min: 1219, max: 2438, itemCode: "CASE-SCREEN-2438", itemName: "케이스(스크린)-2438", qty: 1, desc: "2438mm 단일" },
    { min: 2438, max: 3000, itemCode: "CASE-SCREEN-3000", itemName: "케이스(스크린)-3000", qty: 1, desc: "3000mm 단일" },
    { min: 3000, max: 3500, itemCode: "CASE-SCREEN-3500", itemName: "케이스(스크린)-3500", qty: 1, desc: "3500mm 단일" },
    { min: 3500, max: 4000, itemCode: "CASE-SCREEN-4000", itemName: "케이스(스크린)-4000", qty: 1, desc: "4000mm 단일" },
    { min: 4000, max: 4150, itemCode: "CASE-SCREEN-4150", itemName: "케이스(스크린)-4150", qty: 1, desc: "4150mm 단일" },
    { min: 4150, max: 5369, itemCode: "CASE-SCREEN-2438+1219", itemName: "케이스(스크린)-2438+1219", qty: 1, desc: "2438+1219 조합" },
    { min: 5369, max: 6000, itemCode: "CASE-SCREEN-3000", itemName: "케이스(스크린)-3000", qty: 2, desc: "3000mm × 2" },
    { min: 6000, max: 7000, itemCode: "CASE-SCREEN-3500", itemName: "케이스(스크린)-3500", qty: 2, desc: "3500mm × 2" },
    { min: 7000, max: 8000, itemCode: "CASE-SCREEN-4000", itemName: "케이스(스크린)-4000", qty: 2, desc: "4000mm × 2" },
    { min: 8000, max: 8300, itemCode: "CASE-SCREEN-4150", itemName: "케이스(스크린)-4150", qty: 2, desc: "4150mm × 2" },
  ];

  // 케이스 철재용 11개 구간
  const caseSteelRanges = [
    { min: 0, max: 1219, itemCode: "CASE-STEEL-1219", itemName: "케이스(철재)-1219", qty: 1, desc: "1219mm 단일" },
    { min: 1219, max: 2438, itemCode: "CASE-STEEL-2438", itemName: "케이스(철재)-2438", qty: 1, desc: "2438mm 단일" },
    { min: 2438, max: 3000, itemCode: "CASE-STEEL-3000", itemName: "케이스(철재)-3000", qty: 1, desc: "3000mm 단일" },
    { min: 3000, max: 3500, itemCode: "CASE-STEEL-3500", itemName: "케이스(철재)-3500", qty: 1, desc: "3500mm 단일" },
    { min: 3500, max: 4000, itemCode: "CASE-STEEL-4000", itemName: "케이스(철재)-4000", qty: 1, desc: "4000mm 단일" },
    { min: 4000, max: 4150, itemCode: "CASE-STEEL-4150", itemName: "케이스(철재)-4150", qty: 1, desc: "4150mm 단일" },
    { min: 4150, max: 5369, itemCode: "CASE-STEEL-2438+1219", itemName: "케이스(철재)-2438+1219", qty: 1, desc: "2438+1219 조합" },
    { min: 5369, max: 6000, itemCode: "CASE-STEEL-3000", itemName: "케이스(철재)-3000", qty: 2, desc: "3000mm × 2" },
    { min: 6000, max: 7000, itemCode: "CASE-STEEL-3500", itemName: "케이스(철재)-3500", qty: 2, desc: "3500mm × 2" },
    { min: 7000, max: 8000, itemCode: "CASE-STEEL-4000", itemName: "케이스(철재)-4000", qty: 2, desc: "4000mm × 2" },
    { min: 8000, max: 8300, itemCode: "CASE-STEEL-4150", itemName: "케이스(철재)-4150", qty: 2, desc: "4150mm × 2" },
  ];

  // 규칙 1: 케이스 스크린용
  rules.push({
    id: `case-screen-${Date.now()}`,
    ruleCode: "CASE-SCREEN",
    ruleName: "케이스(셔터박스) - 스크린용",
    category: "케이스(셔터박스)",
    ruleType: "range",
    inputVariable: "S",
    status: "active",
    unit: "EA",
    description: "제작사이즈(S) 기준 스크린용 케이스 자재 규격 및 수량",
    ranges: caseScreenRanges.map((r, idx) => ({
      id: `case-screen-range-${idx}`,
      minValue: r.min,
      maxValue: r.max,
      result: `${r.itemName} × ${r.qty}`,
      itemCode: r.itemCode,
      itemName: r.itemName,
      quantity: r.qty,
      description: r.desc,
    })),
    createdAt: new Date().toISOString(),
    updatedAt: new Date().toISOString(),
  });

  // 규칙 2: 케이스 철재용
  rules.push({
    id: `case-steel-${Date.now()}`,
    ruleCode: "CASE-STEEL",
    ruleName: "케이스(셔터박스) - 철재용",
    category: "케이스(셔터박스)",
    ruleType: "range",
    inputVariable: "S",
    status: "active",
    unit: "EA",
    description: "제작사이즈(S) 기준 철재용 케이스 자재 규격 및 수량",
    ranges: caseSteelRanges.map((r, idx) => ({
      id: `case-steel-range-${idx}`,
      minValue: r.min,
      maxValue: r.max,
      result: `${r.itemName} × ${r.qty}`,
      itemCode: r.itemCode,
      itemName: r.itemName,
      quantity: r.qty,
      description: r.desc,
    })),
    createdAt: new Date().toISOString(),
    updatedAt: new Date().toISOString(),
  });

  return rules;
}
