<?php
defined('BASEPATH') OR exit('No direct script access allowed');

require APPPATH . 'libraries/RestController.php';
require APPPATH . 'libraries/Format.php';

use chriskacerguis\RestServer\RestController;

class Tarifas extends RestController {
    
    function __construct() {
        parent::__construct();
        $this->load->helper('session');
        $this->load->model('tarifas_pase_model');
        $this->load->model('numeros_economicos_model');
    }

    /**
     * Obtiene todas las tarifas configuradas
     */
    public function get_all_get() {
        $filters = array(
            'codigo' => $this->get('codigo'),
            'status' => $this->get('status', 1)
        );
        
        $tarifas = $this->tarifas_pase_model->get_all_tarifas($filters);
        
        if ($tarifas) {
            $this->response([
                'tarifas' => $tarifas,
                'error' => false
            ], RestController::HTTP_OK);
        } else {
            $this->response([
                'tarifas' => [],
                'message' => 'No se encontraron tarifas configuradas',
                'error' => false
            ], RestController::HTTP_OK);
        }
    }

    /**
     * Obtiene una tarifa específica por ID
     */
    public function get_by_id_get() {
        $id = $this->get('id');
        
        if (!$id) {
            $this->response([
                'message' => 'Se requiere el ID de la tarifa',
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
            return;
        }
        
        $tarifa = $this->tarifas_pase_model->get_tarifa_by_id($id);
        
        if ($tarifa) {
            $this->response([
                'tarifa' => $tarifa,
                'error' => false
            ], RestController::HTTP_OK);
        } else {
            $this->response([
                'message' => 'Tarifa no encontrada',
                'error' => true
            ], RestController::HTTP_NOT_FOUND);
        }
    }

    /**
     * Obtiene todas las modalidades disponibles
     */
    public function get_modalidades_get() {
        $modalidades = $this->numeros_economicos_model->get_modalidades();
        
        $this->response([
            'modalidades' => $modalidades,
            'error' => false
        ], RestController::HTTP_OK);
    }

    /**
     * Registra una nueva tarifa
     */
    public function add_post() {
        $this->_validate_tarifa_data();
        
        // Verificar si ya existe una tarifa para esta modalidad
        if ($this->tarifas_pase_model->check_tarifa_exists($this->post('codigo'))) {
            $this->response([
                'message' => 'Ya existe una tarifa configurada para esta modalidad',
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
            return;
        }
        
        $data = array(
            'codigo' => $this->post('codigo'),
            'importe' => $this->post('importe'),
            'descripcion' => $this->post('descripcion'),
            'status' => 1
        );

        $tarifa_id = $this->tarifas_pase_model->insert($data);
        
        if ($tarifa_id) {
            $this->response([
                'message' => 'Tarifa registrada correctamente',
                'tarifa_id' => $tarifa_id,
                'error' => false
            ], RestController::HTTP_OK);
        } else {
            $this->response([
                'message' => 'Error al registrar la tarifa',
                'error' => true
            ], RestController::HTTP_INTERNAL_ERROR);
        }
    }

    /**
     * Actualiza una tarifa existente
     */
    public function update_post() {
        $id = $this->post('id');
        
        if (!$id) {
            $this->response([
                'message' => 'Se requiere el ID de la tarifa',
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
            return;
        }
        
        $this->_validate_tarifa_data();
        
        // Verificar si ya existe una tarifa para esta modalidad (excluyendo la actual)
        if ($this->tarifas_pase_model->check_tarifa_exists($this->post('codigo'), $id)) {
            $this->response([
                'message' => 'Ya existe otra tarifa configurada para esta modalidad',
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
            return;
        }
        
        $data = array(
            'codigo' => $this->post('codigo'),
            'importe' => $this->post('importe'),
            'descripcion' => $this->post('descripcion')
        );

        if ($this->tarifas_pase_model->update($id, $data)) {
            $this->response([
                'message' => 'Tarifa actualizada correctamente',
                'error' => false
            ], RestController::HTTP_OK);
        } else {
            $this->response([
                'message' => 'Error al actualizar la tarifa',
                'error' => true
            ], RestController::HTTP_INTERNAL_ERROR);
        }
    }

    /**
     * Elimina una tarifa
     */
    public function delete_post() {
        $id = $this->post('id');
        
        if (!$id) {
            $this->response([
                'message' => 'Se requiere el ID de la tarifa',
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
            return;
        }
        
        if ($this->tarifas_pase_model->delete($id)) {
            $this->response([
                'message' => 'Tarifa eliminada correctamente',
                'error' => false
            ], RestController::HTTP_OK);
        } else {
            $this->response([
                'message' => 'Error al eliminar la tarifa',
                'error' => true
            ], RestController::HTTP_INTERNAL_ERROR);
        }
    }

    /**
     * Validaciones para los datos de tarifa
     */
    private function _validate_tarifa_data() {
        $this->load->library('form_validation');
        
        $this->form_validation->set_rules('codigo', 'Modalidad', 'required|max_length[1]');
        $this->form_validation->set_rules('importe', 'Importe', 'required|numeric|greater_than[0]');
        $this->form_validation->set_rules('descripcion', 'Descripción', 'max_length[255]');
        
        if (!$this->form_validation->run()) {
            $this->response([
                'message' => validation_errors(),
                'error' => true
            ], RestController::HTTP_BAD_REQUEST);
        }
    }
}