const SettlementModel = require('../models/settlementModel');
const logger = require('../utils/logger');

const SettlementController = {
  // 월간 요약 (분류별 + 업체별)
  getMonthlySummary: async (req, res) => {
    try {
      const { year_month } = req.query;
      if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });

      const [categorySummary, vendorSummary] = await Promise.all([
        SettlementModel.getCategorySummary(year_month),
        SettlementModel.getVendorSummary(year_month)
      ]);

      res.json({ success: true, data: { categorySummary, vendorSummary } });
    } catch (err) {
      logger.error('Settlement summary error:', err);
      res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
    }
  },

  // 월간 상세 구매 목록
  getMonthlyPurchases: async (req, res) => {
    try {
      const { year_month } = req.query;
      if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
      const rows = await SettlementModel.getMonthlyPurchases(year_month);
      res.json({ success: true, data: rows });
    } catch (err) {
      logger.error('Settlement purchases error:', err);
      res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
    }
  },

  // 가격 변동 목록
  getPriceChanges: async (req, res) => {
    try {
      const { year_month } = req.query;
      if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
      const rows = await SettlementModel.getPriceChanges(year_month);
      res.json({ success: true, data: rows });
    } catch (err) {
      logger.error('Settlement priceChanges error:', err);
      res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
    }
  },

  // 정산 완료
  complete: async (req, res) => {
    try {
      const { year_month, vendor_id, notes } = req.body;
      if (!year_month || !vendor_id) return res.status(400).json({ success: false, message: '년월과 업체를 선택해주세요.' });
      const result = await SettlementModel.completeSettlement(year_month, vendor_id, req.user.id, notes);
      res.json({ success: true, data: result, message: '정산 완료 처리되었습니다.' });
    } catch (err) {
      logger.error('Settlement complete error:', err);
      res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
    }
  },

  // 정산 취소
  cancel: async (req, res) => {
    try {
      const { year_month, vendor_id } = req.body;
      if (!year_month || !vendor_id) return res.status(400).json({ success: false, message: '년월과 업체를 선택해주세요.' });
      const result = await SettlementModel.cancelSettlement(year_month, vendor_id);
      res.json({ success: true, data: result, message: '정산이 취소되었습니다.' });
    } catch (err) {
      logger.error('Settlement cancel error:', err);
      res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
    }
  }
};

module.exports = SettlementController;
