<?php
class DatosCompletosComponent extends CApplicationComponent
{
    // Rutas que están exentas de la verificación
    private $excludedRoutes = array(
        'aportante/modificar',
        'inicio/index',
        'inicio/logout',
        'inicio/login',
        'nueva_clave',
        'registro/',
    );

    public function init()
    {
        parent::init();
        $this->registerEventHandler();
    }

    protected function registerEventHandler()
    {
        Yii::app()->onBeginRequest = array($this, 'handleBeginRequest');
    }

    public function handleBeginRequest()
    {
        if ($this->shouldValidateRequest()) {
            $this->validateUserData();
        }
    }

    protected function shouldValidateRequest()
    {
        // Solo validar para usuarios autenticados en requests HTTP normales
        return !Yii::app()->user->isGuest &&
               !Yii::app()->request->isAjaxRequest &&
               Yii::app()->request->requestType === 'GET';
    }

    /*protected function validateUserData()
    {
        Yii::import('application.controllers.FuncionesController');
    
        // Verificación de datos completos para usuarios autenticados
        if (Yii::app()->user->hasState('nivel_acceso')) {
            // Solo aplicar la lógica si el nivel de acceso no es 2
            if (Yii::app()->user->getState('nivel_acceso') != 2) {
                $userId = Yii::app()->user->id;
                $aportante = SidcaiAportante::model()->findByAttributes(array('apor_codigo_pk' => $userId));
    
                // Si el usuario no tiene los datos completos, redirigir
                if ($aportante && !$this->isDataComplete($aportante)) {
                    $this->redirectIfNeeded();
                }
            }
        } else {
            // Si el usuario no tiene un nivel de acceso definido, redirigir
            $userId = Yii::app()->user->id;
            $aportante = SidcaiAportante::model()->findByAttributes(array('apor_codigo_pk' => $userId));
    
            if ($aportante && !$this->isDataComplete($aportante)) {
                $this->redirectIfNeeded();
            }
        }
    }*/

    protected function validateUserData()
    {
        Yii::import('application.controllers.FuncionesController');
    
        $userId = Yii::app()->user->id;
        $aportante = SidcaiAportante::model()->findByAttributes(array('apor_codigo_pk' => $userId));
    
        if ($aportante && !$this->isDataComplete($aportante)) {
           // echo "debe actualizar";die();
            Yii::app()->user->setState('needs_update', true);
        } else {
           // echo "actualizo";die();
            Yii::app()->user->setState('needs_update', false);
        }
    }
    
    

    protected function isDataComplete($aportante)
    {
        return $aportante->datos_actualizados == 1 /*&&/*
               $aportante->apor_actividad_economica != '' &&
               $aportante->apor_porcprivada != 0 &&
               $aportante->apor_porcpublico != 0*/;
    }

    protected function redirectIfNeeded()
    {
        $currentRoute = Yii::app()->urlManager->parseUrl(Yii::app()->request);

        if (!$this->isExcludedRoute($currentRoute)) {
            $this->storeCurrentUrl();
            $this->redirectToUpdate();
        }
    }

    protected function isExcludedRoute($route)
    {
        foreach ($this->excludedRoutes as $excluded) {
            if (strpos($route, $excluded) === 0) {
                return true;
            }
        }
        return false;
    }

    protected function storeCurrentUrl()
    {
        $currentUrl = Yii::app()->request->url;
        if (!in_array($currentUrl, array('aportante/modificar', 'site/login'))) {
            Yii::app()->user->setReturnUrl($currentUrl);
        }
    }

    protected function redirectToUpdate()
    {
        $controller = Yii::app()->getController();
        if ($controller !== null) {
            $controller->redirect(array('aportante/modificar'));
        } else {
            Yii::app()->request->redirect(Yii::app()->createUrl('aportante/modificar'));
        }
        Yii::app()->end();
    }
}