/**
 * 작업보고서 부적합 상세 테이블 마이그레이션
 *
 * 기존: error_hours, error_type_id (단일 값)
 * 변경: 여러 부적합 원인 + 각 원인별 시간 저장 가능
 */

exports.up = function(knex) {
  return knex.schema
    // 1. work_report_defects 테이블 생성
    .createTable('work_report_defects', function(table) {
      table.increments('defect_id').primary();
      table.integer('report_id').notNullable()
        .comment('daily_work_reports의 id');
      table.integer('error_type_id').notNullable()
        .comment('error_types의 id (부적합 원인)');
      table.decimal('defect_hours', 4, 1).notNullable().defaultTo(0)
        .comment('해당 원인의 부적합 시간');
      table.text('note').nullable()
        .comment('추가 메모');
      table.timestamp('created_at').defaultTo(knex.fn.now());

      // 외래키
      table.foreign('report_id').references('id').inTable('daily_work_reports').onDelete('CASCADE');
      table.foreign('error_type_id').references('id').inTable('error_types');

      // 인덱스
      table.index('report_id');
      table.index('error_type_id');

      // 같은 보고서에 같은 원인이 중복되지 않도록
      table.unique(['report_id', 'error_type_id']);
    })
    // 2. 기존 데이터 마이그레이션 (error_hours > 0인 경우)
    .then(function() {
      return knex.raw(`
        INSERT INTO work_report_defects (report_id, error_type_id, defect_hours, created_at)
        SELECT id, error_type_id, error_hours, created_at
        FROM daily_work_reports
        WHERE error_hours > 0 AND error_type_id IS NOT NULL
      `);
    });
};

exports.down = function(knex) {
  return knex.schema.dropTableIfExists('work_report_defects');
};
