<?php
require( DIR_COMPONENTES. 'desarrollosoftware/modelos/TMPLControlador.php');
require( DIR_COMPONENTES. 'desarrollosoftware/modelos/TMPLModelo.php');
require( DIR_COMPONENTES. 'desarrollosoftware/modelos/TMPLModeloSQL.php');
require( DIR_COMPONENTES. 'desarrollosoftware/modelos/TMPLVistas.php');

class Constructor {
    
    static function ejecutar($componenteID, $controladorID, $controladorCLASE, $nombreMODELO, $entidadPLURAR, $nombreENTIDAD, $nombreTABLA, $prefijoTABLA, $nombreVISTA ){
        
        self::cargarDatosConstructor($componenteID, $controladorCLASE, $nombreMODELO, $entidadPLURAR, $nombreENTIDAD, $nombreTABLA, $prefijoTABLA, $nombreVISTA );
        $Componente = Componentes::datos($componenteID);
        
        $rutaModelos = strtolower(DIR_MODELOS.$Componente->componenteCARPETA.DS);
        Archivos::crearArchivo($rutaModelos, $nombreMODELO.".php");
        Archivos::escribirEnArchivo($rutaModelos.$nombreMODELO.".php", self::generarCodificacionModelo() );
        Archivos::crearArchivo($rutaModelos, $nombreMODELO."SQL.php");
        Archivos::escribirEnArchivo($rutaModelos.$nombreMODELO."SQL.php", self::generarCodificacionModeloSQL() );
        
        $rutaControlador = strtolower(DIR_COMPONENTES.$Componente->componenteCARPETA.DS.'controladores'.DS);
        Archivos::crearArchivo($rutaControlador, $controladorCLASE.EXT_CONTROLADOR);
        Archivos::escribirEnArchivo($rutaControlador.$controladorCLASE.EXT_CONTROLADOR, self::generarCodificacionControlador() );
        
        $rutaVistas = strtolower(DIR_COMPONENTES.$Componente->componenteCARPETA.DS.'vistas'.DS.strtolower($controladorCLASE).DS);
        Archivos::crearArchivo($rutaVistas, "lst-todos".EXT_VISTA);
        Archivos::escribirEnArchivo($rutaVistas."lst-todos".EXT_VISTA, self::generarCodificacionModeloListado() );
        Archivos::crearArchivo($rutaVistas, "tbl-todos".EXT_VISTA);
        Archivos::escribirEnArchivo($rutaVistas."tbl-todos".EXT_VISTA, self::generarCodificacionModeloTabla() );
        Archivos::crearArchivo($rutaVistas, "frm-completo".EXT_VISTA);
        Archivos::escribirEnArchivo($rutaVistas."frm-completo".EXT_VISTA, self::generarCodificacionModeloFormulario() );
        Archivos::crearArchivo($rutaVistas, "ver-detalles".EXT_VISTA);
        Archivos::escribirEnArchivo($rutaVistas."ver-detalles".EXT_VISTA, self::generarCodificacionModeloDetalles() );
        
        
        foreach( Constructor::$OperacionesSICAM as $Operacion => $Configuracion ){
            //print_r($Configuracion);
            Operaciones::guardar(
                $controladorID , 
                $Configuracion['operacion'].$controladorCLASE.$Componente->componenteCODIGO , 
                Plantillas::script($Configuracion['titulo'], Plantillas::$variables ), 
                $Configuracion['operacion'], 
                Plantillas::script( (isset($Configuracion['tab']) ? $Configuracion['tab'] : "") , Plantillas::$variables ), 
                isset($Configuracion['menu']) ? $Configuracion['menu'] : "NO" , 
                $Configuracion['icono'], 
                isset($Configuracion['menuTitulo']) ? $Configuracion['menuTitulo'] : "NO"
            );
        }
        
        
        
        
        
    }
    
    
    static function cargarDatosConstructor($componenteID, $controladorCLASE, $nombreMODELO, 
        $entidadPLURAR, $nombreENTIDAD, $nombreTABLA, $prefijoTABLA, $nombreVISTA ){
            
        $Componente = Componentes::datos($componenteID);
        Plantillas::agregarValor('VERSION_SICAM', Parametros::valor('VERSIONSICAM') );
        Plantillas::agregarValor('CORREO_SICAM',  Parametros::valor('CORREOSICAM') );
        Plantillas::agregarValor('FECHA_CREACION', date('Y-m-d h:i:s:u') );
        Plantillas::agregarValor('ANIO_CREACION', date('Y') );
        Plantillas::agregarValor('VERSION_ARCHIVO', date('Ymdhi') );
        Plantillas::agregarValor('CORREO_COLABORADOR', Cliente::correo() );
        Plantillas::agregarValor('NOMBRE_COLABORADOR', Cliente::nombre() );
        
        Plantillas::agregarValor('COMPONENTE_DIR', $Componente->componenteCARPETA  );
        Plantillas::agregarValor('COMPONENTE', $Componente->componenteCODIGO  );
        Plantillas::agregarValor('ENTIDADES', $entidadPLURAR );
        Plantillas::agregarValor('ENTIDAD', $nombreENTIDAD );
        Plantillas::agregarValor('TABLADATOS',  $nombreTABLA );
        Plantillas::agregarValor('PREFIJODATOS',  $prefijoTABLA);
        
        Plantillas::agregarValor('CONTROLADOR', $controladorCLASE );
        Plantillas::agregarValor('DESC_CONTROL', $nombreENTIDAD );
        Plantillas::agregarValor('VISTAS', strtolower($controladorCLASE) );
        Plantillas::agregarValor('SUFIJO_VISTA', $nombreVISTA );
        Plantillas::agregarValor('MODELO',  $nombreMODELO );
        Plantillas::agregarValor('DESC_MODELO', $nombreMODELO );
    }
    
    
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del controlador
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionControlador() {
        $PHPControlador = TMPLControlador::ENCABEZADO;
        //La funciones o metodos
        foreach( Constructor::$OperacionesSICAM as $Operacion => $Configuracion ){
            $PHPControlador .= $Configuracion["script"];
        }
        $PHPControlador .=  TMPLControlador::PIECERA;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModelo() {
        $PHPControlador = TMPLModelo::ENCABEZADO;
        //La funciones o metodos
        foreach( Constructor::$OperacionesSICAM as $Operacion => $Configuracion ){
            $PHPControlador .= $Configuracion["datos"];
        }
        $PHPControlador .=  TMPLModelo::PIECERA;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo de Consultas SQL
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModeloSQL() {
        $PHPControlador = TMPLModeloSQL::ENCABEZADO;
        //La funciones o metodos
        foreach( Constructor::$OperacionesSICAM as $Operacion => $Configuracion ){
            $PHPControlador .= str_replace('\sql','sql', $Configuracion["consulta"]);
        }
        $PHPControlador .=  TMPLModeloSQL::PIECERA;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo de Consultas SQL
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModeloListado() {
        $PHPControlador = TMPLVistas::ENCABEZADO_LISTADO;
        //La funciones o metodos
        foreach( Constructor::$OperacionesSICAM as $Operacion => $Configuracion ){
            $PHPControlador .= $Configuracion["boton"];
        }
        $PHPControlador .=  TMPLVistas::PIECERA_LISTADO;
        return  Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo de Consultas SQL
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModeloTabla() {
        $PHPControlador =  TMPLVistas::TABLA_COMPLETA;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo de Consultas SQL
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModeloFormulario() {
        $PHPControlador =  TMPLVistas::FORMULARIO;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }
    /**
     * Toma los Datos Recibidos para la creacion del archivo/clase del Modelo de Consultas SQL
     * y se reemplazan en las plantillas respectivas para luego enviarlos a la vista.     * 
     */
    static function generarCodificacionModeloDetalles() {
        $PHPControlador =  TMPLVistas::DETALLES;
        return Plantillas::script($PHPControlador, Plantillas::$variables );
    }

    static $OperacionesSICAM = array(
        "VER_DETALLES" => array( 
            'script' => TMPLControlador::VER_DETALLES,
            'datos' => TMPLModelo::DATOS.TMPLModelo::DATOS_COMPLETOS,
            'consulta' => TMPLModeloSQL::DATOS_COMPLETOS,
            'boton' => TMPLVistas::VER_DETALLES,
            'icono' => 'fa fa-info', 'operacion' => 'verDetalles', 
            'titulo' => 'Mostrar datos de un %%ENTIDAD%%', 
            'tab' => 'Datos de %%ENTIDAD%%',
            'vista' => 'detalles'
        ),
        "todos" => array( 
            'script' => TMPLControlador::MOSTRAR_TODOS.TMPLControlador::CARGAR_TABLA,
            'datos' => TMPLModelo::TODOS_REGISTROS,
            'consulta' => TMPLModeloSQL::DATOS_BASICOS,
            'boton' => TMPLVistas::MOSTRAR_TODOS.TMPLVistas::CARGAR_TABLA,
            'icono' => 'fa fa-list-alt', 'operacion' => 'mostrarTodos', 
            'titulo' => 'Mostrar tod@s los %%ENTIDADES%%', 
            'menu' => 'SI', 'menuTitulo' => 'Todos', 
            'tab' => 'Todos los %%ENTIDADES%%',
            'vista' => 'listado'
        ),
        "activos" => array(  
            'script' => '',
            'datos' => TMPLModelo::TODOS_ACTIVOS,
            'consulta' => '',
            'boton' => '',
            'icono' => 'fa fa-list-alt', 'operacion' => 'mostrarActivos', 
            'titulo' => 'Mostrar solo los de %%ENTIDADES%% activ@s', 
            'menu' => 'SI', 'menuTitulo' => 'Activos', 
            'tab' => '%%ENTIDADES%% Activos',
            'vista' => 'listado'
        ),
        "nuevo" => array( 
            'script' => TMPLControlador::MOSTRAR_FORMULARIO_NUEVO.TMPLControlador::GUARDAR_DATOS_NUEVO,
            'datos' => '',
            'consulta' => TMPLModeloSQL::CREAR_REGISTRO,
            'boton' => TMPLVistas::MOSTRAR_FORMULARIO_NUEVO,
            'icono' => 'fa fa-plus-square-o', 'operacion' => 'mostrarFormularioNuevo', 
            'titulo' => 'Abrir formulario para crear un(a) %%ENTIDAD%%', 
            'menu' => 'SI', 'menuTitulo' => 'Nuevo', 
            'tab' => 'Nuev@ %%ENTIDAD%%',
            'vista' => 'formulario'
        ),
        "editar" => array( 
            'script' => TMPLControlador::MOSTRAR_FORMULARIO_EDITAR.TMPLControlador::GUARDAR_DATOS_CAMBIOS,
            'datos' => '',
            'consulta' =>  TMPLModeloSQL::ACTUALIZAR_REGISTRO,
            'boton' => TMPLVistas::MOSTRAR_FORMULARIO_EDITAR,
            'icono' => 'fa fa-pencil-square-o', 'operacion' => 'mostrarFormularioEditar', 
            'titulo' => 'Abrir formulario con datos de %%ENTIDAD%%', 
            'tab' => 'Editar %%ENTIDAD%%',
            'vista' => 'formulario'
        ),
        "guardar" => array( 
            'script' => TMPLControlador::MOSTRAR_FORMULARIO.TMPLControlador::GUARDAR_DATOS,
            'datos' => TMPLModelo::GUARDAR_DATOS.TMPLModelo::ACTUALIZAR_DATOS,
            'consulta' => '',
            'boton' => '',
            'icono' => 'fa fa-floppy-o', 'operacion' => 'guardarDatos', 
            'titulo' => 'Guardar los datos de %%ENTIDAD%%'
        ),
        "eliminar" => array(   
            'script' => TMPLControlador::ELIMINAR_DATOS,
            'datos' => TMPLModelo::ELIMINAR_DATOS,
            'consulta' => TMPLModeloSQL::ELIMINAR_REGISTRO,
            'boton' => TMPLVistas::ELIMINAR_DATOS,
            'icono' => 'fa fa-eraser', 'operacion' => 'eliminar', 
            'titulo' => 'ELiminar %%ENTIDADES%%'
        ),
        "activar" => array(   
            'script' => TMPLControlador::REACTIVAR,
            'datos' =>TMPLModelo::REACTIVAR_DATOS.TMPLModelo::CAMBIAR_ESTADO,
            'consulta' =>  TMPLModeloSQL::ACUALIZAR_ESTADO,
            'boton' => TMPLVistas::REACTIVAR,
            'icono' => 'fa fa-check-square-o', 'operacion' => 'reactivar', 
            'titulo' => 'Cambiar el estado de %%ENTIDAD%% a ACTIVO'
        ),
        "desactivar" => array(   
            'script' => TMPLControlador::DESACTIVAR,
            'datos' => TMPLModelo::DESACTIVAR_DATOS,
            'consulta' => '',
            'boton' => TMPLVistas::DESACTIVAR,
            'icono' => 'fa fa-trash-o', 'operacion' => 'desactivar', 
            'titulo' => 'Cambiar el estado de %%ENTIDAD%% a DESACTIVO'
        ),
    );
    
   static $OperacionesAPI = array(
       "datos" => array(   
            'script' => '',
            'datos' => '',
            'consulta' => '',
            'icono' => 'fa fa-info', 'operacion' => 'datos', 
            'titulo' => 'Datos en JSON de %%ENTIDAD%%'
        ),
        "todos" => array(   
            'script' => '',
            'datos' => '',
            'consulta' => '',
            'icono' => 'fa fa-fax', 'operacion' => 'todos', 
            'titulo' => 'JSON con todos los %%ENTIDADES%%'
        ),
        "activos" => array(   
            'script' => '',
            'datos' => '',
            'consulta' => '',
            'icono' => 'fa fa-check', 'operacion' => 'activos', 
            'titulo' => 'JSON solo con los %%ENTIDADES%% activ@s'
        )
    );    

}
