/**
 * 마이그레이션: error_types에서 issue_report_items로 전환
 *
 * 기존 daily_work_reports.error_type_id가 error_types.id를 참조하던 것을
 * issue_report_items.item_id를 참조하도록 변경
 *
 * 기존 error_types 데이터:
 *   id=1: 설계미스
 *   id=2: 외주작업 불량
 *   id=3: 입고지연
 *
 * 새 issue_report_categories 데이터:
 *   category_id=1: 자재누락 (nonconformity)
 *   category_id=2: 설계미스 (nonconformity)
 *   category_id=3: 입고불량 (nonconformity)
 *
 * 매핑 전략:
 *   - error_types.id=1 (설계미스) → issue_report_items에서 '설계미스' 카테고리의 첫 번째 항목
 *   - error_types.id=2 (외주작업 불량) → issue_report_items에서 '입고불량' 카테고리의 '외관 불량' 항목
 *   - error_types.id=3 (입고지연) → issue_report_items에서 '자재누락' 카테고리의 첫 번째 항목
 */

exports.up = async function(knex) {
  console.log('=== error_type_id 마이그레이션 시작 ===');

  // 1. 기존 error_types 데이터와 새 issue_report_items 매핑 테이블 조회
  const [categories] = await knex.raw(`
    SELECT category_id, category_name
    FROM issue_report_categories
    WHERE category_type = 'nonconformity'
  `);
  console.log('부적합 카테고리:', categories);

  const [items] = await knex.raw(`
    SELECT iri.item_id, iri.item_name, iri.category_id, irc.category_name
    FROM issue_report_items iri
    JOIN issue_report_categories irc ON iri.category_id = irc.category_id
    WHERE irc.category_type = 'nonconformity'
    ORDER BY iri.category_id, iri.display_order
  `);
  console.log('부적합 항목:', items);

  // 2. 매핑 정의 (기존 error_type_id → 새 issue_report_items.item_id)
  // 설계미스 카테고리 찾기
  const designMissCategory = categories.find(c => c.category_name === '설계미스');
  const incomingDefectCategory = categories.find(c => c.category_name === '입고불량');
  const materialShortageCategory = categories.find(c => c.category_name === '자재누락');

  // 각 카테고리의 첫 번째 항목 찾기
  const designMissItem = items.find(i => i.category_id === designMissCategory?.category_id);
  const incomingDefectItem = items.find(i => i.category_id === incomingDefectCategory?.category_id);
  const materialShortageItem = items.find(i => i.category_id === materialShortageCategory?.category_id);

  console.log('매핑 결과:');
  console.log('  - 설계미스(1) → item_id:', designMissItem?.item_id);
  console.log('  - 외주작업불량(2) → item_id:', incomingDefectItem?.item_id);
  console.log('  - 입고지연(3) → item_id:', materialShortageItem?.item_id);

  // 3. 기존 데이터 업데이트
  if (designMissItem) {
    const [result1] = await knex.raw(`
      UPDATE daily_work_reports
      SET error_type_id = ?
      WHERE error_type_id = 1
    `, [designMissItem.item_id]);
    console.log('설계미스(1) 업데이트:', result1.affectedRows, '건');
  }

  if (incomingDefectItem) {
    const [result2] = await knex.raw(`
      UPDATE daily_work_reports
      SET error_type_id = ?
      WHERE error_type_id = 2
    `, [incomingDefectItem.item_id]);
    console.log('외주작업불량(2) 업데이트:', result2.affectedRows, '건');
  }

  if (materialShortageItem) {
    const [result3] = await knex.raw(`
      UPDATE daily_work_reports
      SET error_type_id = ?
      WHERE error_type_id = 3
    `, [materialShortageItem.item_id]);
    console.log('입고지연(3) 업데이트:', result3.affectedRows, '건');
  }

  // 4. 매핑 안된 나머지 데이터 확인 (4 이상의 error_type_id)
  const [unmapped] = await knex.raw(`
    SELECT DISTINCT error_type_id, COUNT(*) as cnt
    FROM daily_work_reports
    WHERE error_type_id IS NOT NULL
    AND error_type_id NOT IN (?, ?, ?)
    GROUP BY error_type_id
  `, [
    designMissItem?.item_id || 0,
    incomingDefectItem?.item_id || 0,
    materialShortageItem?.item_id || 0
  ]);

  if (unmapped.length > 0) {
    console.log('   이 데이터는 수동으로 확인 필요');
  }

  console.log('=== error_type_id 마이그레이션 완료 ===');
};

exports.down = async function(knex) {
  // 롤백은 복잡하므로 로그만 출력
  console.log('   데이터 복구가 필요한 경우 백업에서 복원해주세요.');
};
