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

class Proveedor_model extends CI_Model {

    public function listar() {
        $proveedores = $this->db
            ->select('
                p.*,
                td.abreviado as tipdoc_abreviado,
                td.nombre as tipo_documento,
                m.nombre as moneda,
                m.abreviado as moneda_abreviado,
                fp.nombre as forma_pago,
                sn.nombre as sector_negocio,
                u.nombre as distrito_nombre,
                u.departamento as ub_departamento,
                u.provincia as ub_provincia
            ')
            ->from('lt_proveedor p')
            ->join('mt_documento_identidad td', 'td.id = p.documento_identidad_id')
            ->join('mt_moneda m', 'm.id = p.moneda_id', 'left')
            ->join('mt_forma_pago fp', 'fp.id = p.fp_id', 'left')
            ->join('mt_sector_negocio sn', 'sn.id = p.sn_id', 'left')
            ->join('mt_ubigeo u', 'u.id = p.ubigeo_id', 'left')
            ->order_by('p.id', 'DESC')
            ->get()
            ->result();

        return $proveedores;
    }

    public function obtener($id) {
        return $this->db->where('id', $id)->get('lt_proveedor')->row();
    }

    public function insertar($data) {
        return $this->db->insert('lt_proveedor', $data);
    }

    public function actualizar($id, $data) {
        return $this->db->where('id', $id)->update('lt_proveedor', $data);
    }

    public function cambiarEstado($id, $estado, $usuario_id = null) {
        return $this->db->where('id', $id)->update('lt_proveedor', array(
            'estado'     => $estado,
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $usuario_id
        ));
    }

    public function existe_codigo($codigo, $id = null) {
        $this->db->where('codigo', $codigo);
        if ($id !== null) $this->db->where('id !=', $id);
        return $this->db->get('lt_proveedor')->num_rows() > 0;
    }

    public function existe_documento($nro_documento, $id = null) {
        $this->db->where('nro_documento', $nro_documento);
        if ($id !== null) $this->db->where('id !=', $id);
        return $this->db->get('lt_proveedor')->num_rows() > 0;
    }

    public function listar_documentos() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_documento_identidad')->result();
    }

    public function listar_monedas() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_moneda')->result();
    }

    public function listar_formas_pago() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_forma_pago')->result();
    }

    public function listar_sectores_negocio() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_sector_negocio')->result();
    }

    public function get_departamentos() {
        return $this->db
            ->select('id, departamento as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('provincia', '00')
            ->where('distrito', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_provincias($departamento) {
        return $this->db
            ->select('id, provincia as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $departamento)
            ->where('provincia !=', '00')
            ->where('distrito', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_distritos($departamento, $provincia) {
        return $this->db
            ->select('id, distrito as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $departamento)
            ->where('provincia', $provincia)
            ->where('distrito !=', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_ubigeo_by_id($id) {
        return $this->db->where('id', $id)->get('mt_ubigeo')->row();
    }

    /**
     * Obtiene el token de la API de consulta RUC/DNI configurado
     * para la empresa activa (tabla empresa, columna api_consulta_token).
     */
    public function get_token_api_consulta() {
        $empresa = $this->db
            ->select('api_consulta_token')
            ->where('estado', 1)
            ->get('empresa')
            ->row();

        return $empresa ? $empresa->api_consulta_token : null;
    }

    /**
     * Busca el registro de ubigeo a partir del código de 6 dígitos
     * que devuelve la API (ej. "150131" = departamento 15, provincia 01, distrito 31).
     */
    /**
     * Busca el registro de mt_documento_identidad a partir de su abreviado
     * (DNI / RUC), para autoseleccionar el combo de tipo de documento
     * cuando se autocompleta vía consulta de documento.
     */
    public function get_documento_identidad_by_abreviado($abreviado) {
        return $this->db
            ->where('abreviado', $abreviado)
            ->where('estado', 1)
            ->get('mt_documento_identidad')
            ->row();
    }
}   