const feeModel = require('../models/feeModel');


/**
 * GET /fees
 */
const getAllFees = (req, res) => {
  feeModel.getAllFees((err, rows) => {
    if (err) {
      return res.status(500).json({ error: 'Erro ao buscar taxas.' });
    }
    return res.json(rows); // array de fees
  });
};

/**
 * GET /fees/:id
 */
const getFeeById = (req, res) => {
  const fee_id = parseInt(req.params.id, 10);

  if (!fee_id) {
    return res.status(400).json({ error: 'ID inválido.' });
  }

  feeModel.getFeeById(fee_id, (err, row) => {
    if (err) {
      return res.status(500).json({ error: 'Erro ao buscar taxa.' });
    }
    if (!row) {
      return res.status(404).json({ error: 'Taxa não encontrada.' });
    }
    return res.json(row);
  });
};

/**
 * POST /fees
 * Body: { fee_op, fee_prorata }
 */
const createFee = (req, res) => {
  const { fee_op, fee_prorata } = req.body;

  if (!fee_op || fee_prorata === undefined) {
    return res.status(400).json({
      error: 'Campos obrigatórios: fee_op, fee_prorata.'
    });
  }

  feeModel.createFee(fee_op, fee_prorata, (err, newId) => {
    if (err) {
      return res.status(400).json({ error: err.message });
    }
    return res.status(201).json({
      message: 'Taxa criada com sucesso!',
      fee_id: newId
    });
  });
};

/**
 * PUT /fees/:id
 * Body: { fee_op, fee_prorata }
 */
const updateFee = (req, res) => {
  const fee_id = parseInt(req.params.id, 10);
  const { fee_op, fee_prorata } = req.body;

  if (!fee_id) {
    return res.status(400).json({ error: 'ID inválido na URL.' });
  }
  if (!fee_op || fee_prorata === undefined) {
    return res.status(400).json({
      error: 'Campos obrigatórios: fee_op, fee_prorata.'
    });
  }

  feeModel.updateFee(fee_id, fee_op, fee_prorata, (err, changes) => {
    if (err) {
      return res.status(400).json({ error: err.message });
    }
    if (changes === 0) {
      return res.status(404).json({ error: 'Taxa não encontrada ou sem alterações.' });
    }
    return res.json({ message: 'Taxa atualizada com sucesso!' });
  });
};

/**
 * DELETE /fees/:id
 */
const deleteFee = (req, res) => {
  const fee_id = parseInt(req.params.id, 10);

  if (!fee_id) {
    return res.status(400).json({ error: 'ID inválido na URL.' });
  }

  feeModel.deleteFee(fee_id, (err, changes) => {
    if (err) {
      return res.status(500).json({ error: 'Erro ao remover taxa.' });
    }
    if (changes === 0) {
      return res.status(404).json({ error: 'Taxa não encontrada.' });
    }
    return res.json({ message: 'Taxa removida com sucesso!' });
  });
};

module.exports = {
    getAllFees,
    getFeeById,
    createFee,
    updateFee,
    deleteFee
};
