/**
 * vacationTypeModel.js
 * 휴가 유형 관련 데이터베이스 쿼리 모델
 */

const { getDb } = require('../dbPool');

const vacationTypeModel = {
  /**
   * 모든 활성 휴가 유형 조회 (우선순위 순서대로)
   */
  async getAll() {
    const db = await getDb();
    const [rows] = await db.query(`
      SELECT *
      FROM vacation_types
      WHERE is_active = 1
      ORDER BY priority ASC, id ASC
    `);
    return rows;
  },

  /**
   * 시스템 기본 휴가 유형만 조회
   */
  async getSystemTypes() {
    const db = await getDb();
    const [rows] = await db.query(`
      SELECT *
      FROM vacation_types
      WHERE is_system = 1 AND is_active = 1
      ORDER BY priority ASC
    `);
    return rows;
  },

  /**
   * 특별 휴가 유형만 조회
   */
  async getSpecialTypes() {
    const db = await getDb();
    const [rows] = await db.query(`
      SELECT *
      FROM vacation_types
      WHERE is_special = 1 AND is_active = 1
      ORDER BY priority ASC
    `);
    return rows;
  },

  /**
   * 특정 ID로 휴가 유형 조회
   */
  async getById(id) {
    const db = await getDb();
    const [rows] = await db.query(`SELECT * FROM vacation_types WHERE id = ?`, [id]);
    return rows;
  },

  /**
   * 휴가 유형 코드로 조회
   */
  async getByCode(code) {
    const db = await getDb();
    const [rows] = await db.query(`SELECT * FROM vacation_types WHERE type_code = ?`, [code]);
    return rows;
  },

  /**
   * 휴가 유형 생성
   */
  async create(typeData) {
    const db = await getDb();
    const [result] = await db.query(`INSERT INTO vacation_types SET ?`, typeData);
    return result;
  },

  /**
   * 휴가 유형 수정
   */
  async update(id, updateData) {
    const db = await getDb();
    const [result] = await db.query(`UPDATE vacation_types SET ? WHERE id = ?`, [updateData, id]);
    return result;
  },

  /**
   * 휴가 유형 삭제 (논리적 삭제 - is_active = 0)
   */
  async delete(id) {
    const db = await getDb();
    const [result] = await db.query(`UPDATE vacation_types SET is_active = 0, updated_at = NOW() WHERE id = ?`, [id]);
    return result;
  },

  /**
   * 우선순위 업데이트
   */
  async updatePriority(id, priority) {
    const db = await getDb();
    const [result] = await db.query(`UPDATE vacation_types SET priority = ?, updated_at = NOW() WHERE id = ?`, [priority, id]);
    return result;
  }
};

module.exports = vacationTypeModel;
