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

class Areas extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('mantenimiento/Area_model');
    }

    public function index() {
        $this->validar_permiso('areas_ver');

        $data['titulo'] = 'Áreas';
        $data['areas'] = $this->Area_model->listar();
        $this->layout('mantenimiento/areas/index', $data);
    }

    public function create() {
        $this->validar_permiso('areas_crear');

        $data['titulo'] = 'Nueva Área';
        $this->layout('mantenimiento/areas/create', $data);
    }

    public function store() {
        $this->validar_permiso('areas_crear');

        $this->form_validation->set_rules('codigo', 'Código', 'required|trim|max_length[20]');
        $this->form_validation->set_rules('nombre', 'Nombre', 'required|trim|max_length[100]');
        $this->form_validation->set_rules('descripcion', 'Descripción', 'trim|max_length[255]');

        if ($this->form_validation->run() == FALSE) {
            $this->create();
            return;
        }

        $codigo = strtoupper(trim($this->input->post('codigo', TRUE)));
        $nombre = trim($this->input->post('nombre', TRUE));

        if ($this->Area_model->existe_codigo($codigo)) {
            $this->session->set_flashdata('error', 'El código del área ya existe');
            redirect('mantenimiento/areas/create');
        }

        if ($this->Area_model->existe_nombre($nombre)) {
            $this->session->set_flashdata('error', 'El nombre del área ya existe');
            redirect('mantenimiento/areas/create');
        }

        $data = array(
            'codigo' => $codigo,
            'nombre' => $nombre,
            'descripcion' => trim($this->input->post('descripcion', TRUE)),
            'estado' => 1,
            'created_by' => $this->session->userdata('id')
        );

        if ($this->Area_model->insertar($data)) {
            $this->session->set_flashdata('success', 'Área registrada correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo registrar el área');
        }

        redirect('mantenimiento/areas');
    }

    public function edit($id) {
        $this->validar_permiso('areas_editar');

        $area = $this->Area_model->obtener($id);

        if (!$area) {
            show_404();
        }

        $data['titulo'] = 'Editar Área';
        $data['area'] = $area;
        $this->layout('mantenimiento/areas/edit', $data);
    }

    public function update($id) {
        $this->validar_permiso('areas_editar');

        $area = $this->Area_model->obtener($id);

        if (!$area) {
            show_404();
        }

        $this->form_validation->set_rules('codigo', 'Código', 'required|trim|max_length[20]');
        $this->form_validation->set_rules('nombre', 'Nombre', 'required|trim|max_length[100]');
        $this->form_validation->set_rules('descripcion', 'Descripción', 'trim|max_length[255]');

        if ($this->form_validation->run() == FALSE) {
            $this->edit($id);
            return;
        }

        $codigo = strtoupper(trim($this->input->post('codigo', TRUE)));
        $nombre = trim($this->input->post('nombre', TRUE));

        if ($this->Area_model->existe_codigo($codigo, $id)) {
            $this->session->set_flashdata('error', 'El código del área ya existe');
            redirect('mantenimiento/areas/edit/' . $id);
        }

        if ($this->Area_model->existe_nombre($nombre, $id)) {
            $this->session->set_flashdata('error', 'El nombre del área ya existe');
            redirect('mantenimiento/areas/edit/' . $id);
        }

        $data = array(
            'codigo' => $codigo,
            'nombre' => $nombre,
            'descripcion' => trim($this->input->post('descripcion', TRUE)),
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $this->session->userdata('id')
        );

        if ($this->Area_model->actualizar($id, $data)) {
            $this->session->set_flashdata('success', 'Área actualizada correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo actualizar el área');
        }

        redirect('mantenimiento/areas');
    }

    public function estado($id) {
        $this->validar_permiso('areas_eliminar');

        $area = $this->Area_model->obtener($id);

        if (!$area) {
            show_404();
        }

        $nuevoEstado = ($area->estado == 1) ? 0 : 1;

        if ($this->Area_model->cambiarEstado($id, $nuevoEstado, $this->session->userdata('id'))) {
            $mensaje = ($nuevoEstado == 1) ? 'Área activada correctamente' : 'Área desactivada correctamente';
            $this->session->set_flashdata('success', $mensaje);
        } else {
            $this->session->set_flashdata('error', 'No se pudo cambiar el estado del área');
        }

        redirect('mantenimiento/areas');
    }
}