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

class Tarifas_pase_model extends CI_Model {
    
    public function __construct() {
        parent::__construct();
        $this->load->database();
        $this->table = 'tarifas_pase';
    }
    
    /**
     * Obtiene todas las tarifas por pase
     */
    public function get_all_tarifas($filters = array()) {
        $this->db->select('tp.*, nem.modalidad_nombre');
        $this->db->from($this->table . ' tp');
        $this->db->join('numeros_economicos nem', 'tp.codigo = nem.codigo', 'left');
        
        // Aplicar filtros
        if (!empty($filters['codigo'])) {
            $this->db->where('tp.codigo', $filters['codigo']);
        }
        
        if (isset($filters['status']) && $filters['status'] !== '') {
            $this->db->where('tp.status', $filters['status']);
        } else {
            $this->db->where('tp.status', 1); // Por defecto solo activos
        }
        
        $this->db->group_by('nem.modalidad_nombre');
        $this->db->order_by('nem.modalidad_nombre', 'ASC');
        $this->db->order_by('tp.importe', 'ASC');
        
        $query = $this->db->get();
        return $query->result_array();
    }
    
    /**
     * Obtiene una tarifa específica por ID
     */
    public function get_tarifa_by_id($id) {
        $this->db->select('tp.*, nem.modalidad_nombre');
        $this->db->from($this->table . ' tp');
        $this->db->join('numeros_economicos_modalidades nem', 'tp.codigo = nem.id', 'left');
        $this->db->where('tp.id', $id);
        
        $query = $this->db->get();
        
        if ($query->num_rows() > 0) {
            return $query->row_array();
        }
        
        return NULL;
    }
    
    /**
     * Inserta una nueva tarifa
     */
    public function insert($data) {
        $data['created_at'] = date('Y-m-d H:i:s');
        $data['updated_at'] = date('Y-m-d H:i:s');
        
        if ($this->db->insert($this->table, $data)) {
            $id = $this->db->insert_id();
            if (create_log($this->table, $id, $data)) {
                return $id;
            }
        }
        return FALSE;
    }
    
    /**
     * Actualiza una tarifa existente
     */
    public function update($id, $data) {
        $data['updated_at'] = date('Y-m-d H:i:s');
        
        $this->db->where('id', $id);
        if ($this->db->update($this->table, $data)) {
            if (create_log($this->table, $id, $data)) {
                return TRUE;
            }
        }
        return FALSE;
    }
    
    /**
     * Elimina lógicamente una tarifa
     */
    public function delete($id) {
        $data = array(
            'status' => 0,
            'updated_at' => date('Y-m-d H:i:s')
        );
        
        $this->db->where('id', $id);
        if ($this->db->update($this->table, $data)) {
            if (create_log($this->table, $id, $data)) {
                return TRUE;
            }
        }
        return FALSE;
    }
    
    /**
     * Verifica si existe una tarifa para una modalidad específica
     */
    public function check_tarifa_exists($codigo, $exclude_id = NULL) {
        $this->db->where('codigo', $codigo);
        $this->db->where('status', 1);
        
        if ($exclude_id) {
            $this->db->where('id !=', $exclude_id);
        }
        
        $query = $this->db->get($this->table);
        return $query->num_rows() > 0;
    }
    
    /**
     * Obtiene el importe a descontar por pase según la modalidad
     */
    public function get_importe_by_modalidad($codigo) {
        $this->db->select('importe');
        $this->db->from($this->table);
        $this->db->where('codigo', $codigo);
        $this->db->where('status', 1);
        $this->db->limit(1);
        
        $query = $this->db->get();
        
        if ($query->num_rows() > 0) {
            $row = $query->row_array();
            return $row['importe'];
        }
        
        return NULL;
    }
}