<?php
class ActividadeconomicaController extends Controller
{
    public $layout = 'panel';

    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array(
                'allow', // allow all users to perform 'index' and 'view' actions
                'actions' => array('index', 'view', 'obtenerDatos', 'agregar', 'modificar', 'eliminar'),
                'users' => array('@'),
            ),
            array(
                'deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

    /*** Muestra todas las monedas ***/
    public function actionIndex()
    {
        $this->render('index');
    }

    /**** Muestra los datos de la Moneda ***/
    public function actionView($id)
    {
        $model = $this->loadModel($id);
        $this->render('view', array('model' => $model));
    }

    /*** Agregar Moneda ***/
    public function actionAgregar()
    {
        $model = new SidcaiActividadEconomica("agregar");
        $this->performAjaxValidation($model);
        if (isset($_POST['SidcaiActividadEconomica'])) {
            if (isset($_POST['ok'])) {
                $data = null; // Variable que sera enviada por JSON
                $data['datos'] = $this->guardar($model, $_POST['SidcaiActividadEconomica'], "agregar");
                echo json_encode($data);
            }
            Yii::app()->end();
        } else
            $this->render('guardar', array('model' => $model));
    }

    /*** Modificar Moneda ***/
    public function actionModificar($id)
    {
        $model = $this->loadModel($id);
        $model->scenario = "modificar";
        $this->performAjaxValidation($model);
        if (isset($_POST['SidcaiActividadEconomica'])) {
            if (isset($_POST['ok'])) {
                $data = null; // Variable que sera enviada por JSON
                $data['datos'] = $this->guardar($model, $_POST['SidcaiActividadEconomica'], "modificar", $id);
                echo json_encode($data);
            }
            Yii::app()->end();
        } else {
            $model->act_habilitado = ($model->act_habilitado) ? 1 : 0;
            $this->render('guardar', array('model' => $model));
        }
    }

    /*** Eliminar Moneda ***/
    public function actionEliminar($id)
    {
        try {
            $this->loadModel($id)->delete();
            Yii::app()->user->setState('success_eliminar', 'Se ha eliminado el registro correctamente.');
        } catch (CDbException $e) {
            Yii::app()->user->setState('danger_eliminar', '<b>¡Ups!</b> Ha ocurrido un error y no se pudo eliminar, intente más tarde.<br><br><b>Mensaje de error:</b><br><br>' . $e->getMessage());
        }
        $this->redirect(Yii::app()->baseUrl . "/admin/actividadEconomica");
    }

    // Action llamado por Ajax en "dataTable.js" para mostrar todas las monedas.
    public function actionObtenerDatos()
    {
        $nTotal = SidcaiActividadEconomica::model()->count();

        $columnasParaRetorno = [
            'act_codigo_pk',
            'act_nombre',
            'act_tipoempresa_fk',
            'act_habilitado',
            'acciones'
        ];

        $datosDeLlamada = $_GET;

        $consulta = "";
        if (isset($datosDeLlamada['sSearch']) && $datosDeLlamada['sSearch'] !== "") {
            for ($i = 0; $i < count($columnasParaRetorno); $i++) {
                if (isset($datosDeLlamada['bSearchable_' . $i]) && $datosDeLlamada['bSearchable_' . $i] == 'true') {
                    if ($i == (count($columnasParaRetorno) - 1)) {
                        $or = "";
                    } else {
                        $or = " OR ";
                    }
                    if ($columnasParaRetorno[$i] == "acciones")
                        $columnasParaRetorno[$i] = "act_codigo_pk";

                    $consulta .= " CAST(" . $columnasParaRetorno[$i] . " AS text) LIKE '%" . addslashes($datosDeLlamada['sSearch']) . "%'" . $or;
                }
            }
            $consulta = "WHERE " . $consulta;
        }

        $ordenado = "";
        if (isset($datosDeLlamada['iSortCol_0'])) {
            $columnasDeOrdenacion = intval($datosDeLlamada['iSortingCols']);
            for ($i = 0; $i < $columnasDeOrdenacion; $i++) {
                if ($datosDeLlamada['bSortable_' . intval($datosDeLlamada['iSortCol_' . $i])] == 'true') {
                    if ($columnasParaRetorno[intval($datosDeLlamada['iSortCol_' . $i])] == "acciones")
                        $columnasParaRetorno[intval($datosDeLlamada['iSortCol_' . $i])] = "act_codigo_pk";

                    $ordenado = $columnasParaRetorno[intval($datosDeLlamada['iSortCol_' . $i])] . ($datosDeLlamada['sSortDir_' . $i] === 'asc' ? ' asc' : ' desc');
                    break;
                }
            }
            $ordenado = "ORDER BY " . $ordenado;
        }

        $offset = $datosDeLlamada['iDisplayStart'];
        $limit = $datosDeLlamada['iDisplayLength'];
        $totalFiltro = 0;
        $connection = Yii::app()->db;

        $sql = "SELECT * FROM sidcai_actividad_economica $consulta $ordenado OFFSET $offset LIMIT $limit";
        $command = $connection->createCommand();
        $command->text = $sql;
        $model = $command->queryAll();

        $sql = "SELECT COUNT(*) FROM sidcai_actividad_economica $consulta";
        $command = $connection->createCommand();
        $command->text = $sql;
        $totalFiltro = $command->queryAll();
        $totalFiltro = $totalFiltro[0]['count'];

        $tipoEmpresaMap = [
            '1' => 'Empresas de casinos, bingos, máquinas traganíqueles y relacionadas con alcohol y tabaco.',
            '2' => 'Empresas de hidrocarburos y minería estratégica, según leyes específicas.',
            '3' => 'Otras empresas no incluidas en las categorías anteriores.'
        ];

        $aaData = [];
        foreach ($model as $m) {
            $ver = '<a class="btn-acciones text-info p-2" title="Ver" href="' . Yii::app()->homeUrl . 'admin/actividadEconomica/' . $m['act_codigo_pk'] . '"><i class="far fa-eye"></i></a>';
            $modificar = '<a class="btn-acciones text-warning p-2" title="Modificar" href="' . Yii::app()->homeUrl . 'admin/actividadEconomica/modificar/' . $m['act_codigo_pk'] . '"><i class="fas fa-pen"></i></a>';
            $borrar = '<a class="btn-acciones text-danger p-2" title="Eliminar" href="" data-toggle="modal" data-target=".bd-example-modal-sm" onclick="eliminar(' . $m['act_codigo_pk'] . ')"><i class="fas fa-times"></i></a>';

            $aaData[] = [
                $m['act_codigo_pk'],
                $m['act_nombre'],
                $tipoEmpresaMap[$m['act_tipoempresa_fk']] ?? 'Desconocido',
                $m['act_habilitado'] ? 'Habilitado' : 'Deshabilitado',
                $ver . $modificar . $borrar
            ];
        }

        $aData = [
            'sEcho' => intval($datosDeLlamada['sEcho']),
            'iTotalRecords' => strval($nTotal),
            'iTotalDisplayRecords' => strval($totalFiltro),
            'aaData' => $aaData
        ];

        echo json_encode($aData);
    }

    /*********************************************************************************************
     Funciones
    *********************************************************************************************/

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer $id the ID of the model to be loaded
     * @return SidcaiActividadEconomica the loaded model
     * @throws CHttpException
     */
    public function loadModel(int $id)
    {
        $model = SidcaiActividadEconomica::model()->findByPk($id);

        if ($model === null)
            throw new CHttpException(404, 'La página no existe.');

        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param SidcaiActividadEconomica $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'sidcai-actividad-economica-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * Función para guardar un registro tanto en agregar como en modificar.
     * Función llamada en "actionAgregar" y en "actionModificar".
     * @return array("alert", "mensaje", "(solo en $model->save()) agregar : modificar")
     */
	private function guardar($model, array $post, string $accion, int $id = null): array
{
    try {
        Yii::import("application.controllers.FuncionesController");
        $atributos = [];
        foreach ($post as $key => $value) {
            $atributos[$key] = CHtml::encode($value);
        }

        $model->attributes = $atributos;

        // Depuración: Imprimir atributos asignados
        Yii::log("Atributos asignados: " . print_r($model->attributes, true), CLogger::LEVEL_INFO);

        $msj_error = "Por favor verifique el siguiente campo:<br><br>";

        if (!$model->validate()) {
            $errores = FuncionesController::erroresModel($model, "SidcaiActividadEconomica");
            Yii::log("Errores de validación: " . print_r($model->getErrors(), true), CLogger::LEVEL_ERROR);
            return ["warning", $msj_error . $errores];
        }

        if ($accion == "agregar") {
            if ($model->save()) {
                $guardar = ["success", "Se agregó la Actividad Económica correctamente.", $accion];
            } else {
                Yii::log("Errores al guardar: " . print_r($model->getErrors(), true), CLogger::LEVEL_ERROR);
                $guardar = ["danger", "No se logró agregar la Actividad Económica."];
            }
        } else {
            $model_guardar = $this->loadModel($id);
            $model_guardar->scenario = "modificar";
            $model_guardar->act_nombre = $model->act_nombre;
            $model_guardar->act_tipoempresa_fk = $model->act_tipoempresa_fk;
            $model_guardar->act_habilitado = $model->act_habilitado;

            if ($model_guardar->save()) {
                $guardar = ["success", "Se modificó la Actividad Económica correctamente.", $accion];
            } else {
                Yii::log("Errores al guardar: " . print_r($model_guardar->getErrors(), true), CLogger::LEVEL_ERROR);
                $guardar = ["danger", "No se logró modificar la Actividad Económica."];
            }
            $model_guardar->unsetAttributes();
        }

        unset($_POST['SidcaiActividadEconomica']);
        $model->unsetAttributes();
        return $guardar;
    } catch (Exception $e) {
        Yii::log("Excepción capturada: " . $e->getMessage(), CLogger::LEVEL_ERROR);
        return ["danger", "¡Ups! Ha ocurrido un error, por favor intente más tarde."];
    }
}



	
}
