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

class Cliente_contactos extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('ventas/Cliente_contacto_model');
        $this->load->model('ventas/Cliente_model');
    }

    protected function validar_permiso_ajax($slug) {
        if (!tiene_permiso($slug)) {
            echo json_encode(array(
                'status' => false,
                'message' => 'No tienes permisos para esta acción'
            ));
            exit;
        }
    }

    private function validar_celular($celular) {
        $celular = trim($celular);

        if ($celular === '') {
            return true;
        }

        if (!ctype_digit($celular)) {
            return 'El celular debe contener solo números';
        }

        if (strlen($celular) != 9) {
            return 'El celular debe tener 9 dígitos';
        }

        return true;
    }

    public function listar($cliente_id) {
        $this->validar_permiso_ajax('cliente_contacto_ver');

        $cliente = $this->Cliente_model->obtener($cliente_id);
        if (!$cliente) {
            echo json_encode(array('data' => array()));
            return;
        }

        $items = $this->Cliente_contacto_model->listar_por_cliente($cliente_id);
        $data = array();

        foreach ($items as $item) {
            $estado = $item->estado == 1
                ? '<span class="label label-success">Activo</span>'
                : '<span class="label label-danger">Inactivo</span>';

            $sexo = '-';
            if ($item->sexo === 'M') $sexo = 'Masculino';
            if ($item->sexo === 'F') $sexo = 'Femenino';

            $acciones = '';

            if (tiene_permiso('cliente_contacto_editar')) {
                $acciones .= '<button type="button" class="btn btn-warning btn-xs btn-editar-contacto" data-id="'.$item->id.'">
                                <i class="fa fa-pencil"></i>
                              </button> ';
            }

            if (tiene_permiso('cliente_contacto_eliminar')) {
                if ($item->estado == 1) {
                    $acciones .= '<button type="button" class="btn btn-danger btn-xs btn-estado-contacto"
                                    data-id="'.$item->id.'"
                                    data-accion="desactivar"
                                    data-nombre="'.$item->nombre.'">
                                    <i class="fa fa-times"></i>
                                  </button>';
                } else {
                    $acciones .= '<button type="button" class="btn btn-success btn-xs btn-estado-contacto"
                                    data-id="'.$item->id.'"
                                    data-accion="activar"
                                    data-nombre="'.$item->nombre.'">
                                    <i class="fa fa-check"></i>
                                  </button>';
                }
            }

            $data[] = array(
                $item->id,
                $item->nombre,
                !empty($item->email) ? $item->email : '-',
                !empty($item->celular) ? $item->celular : '-',
                $sexo,
                !empty($item->fecha_nacimiento) ? $item->fecha_nacimiento : '-',
                !empty($item->cargo) ? $item->cargo : '-',
                $estado,
                $acciones
            );
        }

        echo json_encode(array('data' => $data));
    }

    public function guardar() {
        $this->validar_permiso_ajax('cliente_contacto_crear');

        $cliente_id = $this->input->post('cliente_id', TRUE);
        $nombre = strtoupper(trim($this->input->post('nombre', TRUE)));
        $email = trim($this->input->post('email', TRUE));
        $celular = trim($this->input->post('celular', TRUE));
        $sexo = $this->input->post('sexo', TRUE);
        $fecha_nacimiento = $this->input->post('fecha_nacimiento', TRUE);
        $cargo = strtoupper(trim($this->input->post('cargo', TRUE)));

        if (empty($cliente_id) || $nombre === '') {
            echo json_encode(array(
                'status' => false,
                'message' => 'Cliente y nombre son obligatorios'
            ));
            return;
        }

        if ($email !== '' && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo json_encode(array(
                'status' => false,
                'message' => 'El correo electrónico no tiene un formato válido'
            ));
            return;
        }

        $validacion_celular = $this->validar_celular($celular);
        if ($validacion_celular !== true) {
            echo json_encode(array(
                'status' => false,
                'message' => $validacion_celular
            ));
            return;
        }

        if (!empty($fecha_nacimiento) && strtotime($fecha_nacimiento) > strtotime(date('Y-m-d'))) {
            echo json_encode(array(
                'status' => false,
                'message' => 'La fecha de nacimiento no puede ser mayor a hoy'
            ));
            return;
        }

        if (!empty($sexo) && !in_array($sexo, array('M', 'F'))) {
            echo json_encode(array(
                'status' => false,
                'message' => 'Sexo no válido'
            ));
            return;
        }

        $data = array(
            'cliente_id' => $cliente_id,
            'nombre' => $nombre,
            'email' => $email,
            'celular' => $celular,
            'sexo' => $sexo !== '' ? $sexo : null,
            'fecha_nacimiento' => $fecha_nacimiento !== '' ? $fecha_nacimiento : null,
            'cargo' => $cargo,
            'estado' => 1,
            'created_by' => $this->session->userdata('id')
        );

        $ok = $this->Cliente_contacto_model->insertar($data);

        echo json_encode(array(
            'status' => $ok ? true : false,
            'message' => $ok ? 'Contacto registrado correctamente' : 'No se pudo registrar el contacto'
        ));
    }

    public function obtener($id) {
        $this->validar_permiso_ajax('cliente_contacto_editar');

        $item = $this->Cliente_contacto_model->obtener($id);

        if (!$item) {
            echo json_encode(array(
                'status' => false,
                'message' => 'Contacto no encontrado'
            ));
            return;
        }

        echo json_encode(array(
            'status' => true,
            'data' => $item
        ));
    }

    public function actualizar($id) {
        $this->validar_permiso_ajax('cliente_contacto_editar');

        $item = $this->Cliente_contacto_model->obtener($id);

        if (!$item) {
            echo json_encode(array(
                'status' => false,
                'message' => 'Contacto no encontrado'
            ));
            return;
        }

        $nombre = strtoupper(trim($this->input->post('nombre', TRUE)));
        $email = trim($this->input->post('email', TRUE));
        $celular = trim($this->input->post('celular', TRUE));
        $sexo = $this->input->post('sexo', TRUE);
        $fecha_nacimiento = $this->input->post('fecha_nacimiento', TRUE);
        $cargo = strtoupper(trim($this->input->post('cargo', TRUE)));

        if ($nombre === '') {
            echo json_encode(array(
                'status' => false,
                'message' => 'El nombre es obligatorio'
            ));
            return;
        }

        if ($email !== '' && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo json_encode(array(
                'status' => false,
                'message' => 'El correo electrónico no tiene un formato válido'
            ));
            return;
        }

        $validacion_celular = $this->validar_celular($celular);
        if ($validacion_celular !== true) {
            echo json_encode(array(
                'status' => false,
                'message' => $validacion_celular
            ));
            return;
        }

        if (!empty($fecha_nacimiento) && strtotime($fecha_nacimiento) > strtotime(date('Y-m-d'))) {
            echo json_encode(array(
                'status' => false,
                'message' => 'La fecha de nacimiento no puede ser mayor a hoy'
            ));
            return;
        }

        if (!empty($sexo) && !in_array($sexo, array('M', 'F'))) {
            echo json_encode(array(
                'status' => false,
                'message' => 'Sexo no válido'
            ));
            return;
        }

        $data = array(
            'nombre' => $nombre,
            'email' => $email,
            'celular' => $celular,
            'sexo' => $sexo !== '' ? $sexo : null,
            'fecha_nacimiento' => $fecha_nacimiento !== '' ? $fecha_nacimiento : null,
            'cargo' => $cargo,
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $this->session->userdata('id')
        );

        $ok = $this->Cliente_contacto_model->actualizar($id, $data);

        echo json_encode(array(
            'status' => $ok ? true : false,
            'message' => $ok ? 'Contacto actualizado correctamente' : 'No se pudo actualizar el contacto'
        ));
    }

    public function estado($id) {
        $this->validar_permiso_ajax('cliente_contacto_eliminar');

        $item = $this->Cliente_contacto_model->obtener($id);

        if (!$item) {
            echo json_encode(array(
                'status' => false,
                'message' => 'Contacto no encontrado'
            ));
            return;
        }

        $nuevoEstado = $item->estado == 1 ? 0 : 1;

        $ok = $this->Cliente_contacto_model->cambiarEstado($id, $nuevoEstado, $this->session->userdata('id'));

        echo json_encode(array(
            'status' => $ok ? true : false,
            'message' => $ok
                ? ($nuevoEstado == 1 ? 'Contacto activado correctamente' : 'Contacto desactivado correctamente')
                : 'No se pudo cambiar el estado'
        ));
    }
}