const movimentoService = require("../services/movimentoService");
const logger = require("../utils/logger");

// Controller methods for movimento operations
const getAllMovimentos = async (req, res) => {
  const queryParams = req.query; // Assuming you want to get parameters from the request body
  try {
    const movimentos = await movimentoService.getAllMovimentos(queryParams);
    res.json(movimentos);
  } catch (error) {
    logger.error(`Error getting all movimentos: ${error.message}`);
    res.status(500).json({ error: "Internal Server Error" });
  }
};

const getMovimentoById = async (req, res) => {
  const { id } = req.params;
  const queryParams = req.body; // Assuming you want to get parameters from the request body
  try {
    const movimento = await movimentoService.getMovimentoById(id, queryParams);
    if (!movimento) {
      return res.status(404).json({ error: "Movimento not found" });
    }
    res.json(movimento);
  } catch (error) {
    logger.error(`Error getting movimento by ID: ${error.message}`);
    res.status(500).json({ error: "Internal Server Error" });
  }
};


const createMovimento = async (req, res) => {
  const { body } = req;
  try {
    const newMovimento = await movimentoService.createMovimento(body);
    res.status(201).json(newMovimento);
  } catch (error) {
    logger.error(`Error creating movimento: ${error.message}`);
    res.status(500).json({ error: "Internal Server Error" });
  }
};

const updateMovimento = async (req, res) => {
  const { id } = req.params;
  const { body } = req;
  try {
    const updatedMovimento = await movimentoService.updateMovimento(id, body);
    if (!updatedMovimento) {
      return res.status(404).json({ error: "Movimento not found" });
    }
    res.json(updatedMovimento);
  } catch (error) {     
    logger.error(`Error updating movimento: ${error.message}`);
    res.status(500).json({ error: "Internal Server Error" });
  }
};

const deleteMovimento = async (req, res) => {
  const { id } = req.params;
  try {
    const deletedMovimento = await movimentoService.deleteMovimento(id);
    if (!deletedMovimento) {
      return res.status(404).json({ error: "Movimento not found" });
    }
    res.json({ message: "Movimento deleted successfully" });
  } catch (error) {
    logger.error(`Error deleting movimento: ${error.message}`);
    res.status(500).json({ error: "Internal Server Error" });
  }
};

module.exports = {
  getAllMovimentos,
  getMovimentoById,
  createMovimento,
  updateMovimento,
  deleteMovimento,
};
