<?php

declare(strict_types=1);

namespace App\Controller\Portal;

use Cake\Controller\Controller;
use Cake\Event\EventInterface;

/**
 * Controlador base para el portal de clientes.
 *
 * A propósito NO extiende de AppController: ese controlador carga
 * PermisosComponent, diseñado para identidades de staff (Users con rol_id).
 * La identidad del portal es un ClienteCredencial, que no tiene rol_id,
 * así que aquí se replica solo lo estrictamente necesario (Authentication, Flash).
 * El aislamiento de datos se hace filtrando siempre por el cliente_facturacion_id
 * de la identidad autenticada, nunca por roles/permisos.
 */
class PortalAppController extends Controller
{
    public function initialize(): void
    {
        parent::initialize();

        $this->loadComponent('Authentication.Authentication');
        $this->loadComponent('Flash');

        $this->viewBuilder()->setLayout('portal');

        $cliente = $this->getClienteAutenticado();
        $this->set('clienteAutenticado', $cliente);
    }

    public function beforeFilter(EventInterface $event)
    {
        parent::beforeFilter($event);

        $this->Authentication->addUnauthenticatedActions(['login']);
    }

    /**
     * Devuelve la entidad ClienteFacturacion del cliente autenticado en el portal.
     */
    protected function getClienteAutenticado()
    {
        $identity = $this->Authentication->getIdentity();

        return $identity ? $identity->get('clientes_facturacion') : null;
    }

    protected function getClienteFacturacionId(): ?int
    {
        $identity = $this->Authentication->getIdentity();

        return $identity ? (int) $identity->get('cliente_facturacion_id') : null;
    }
}
