<?php
declare(strict_types=1);

namespace Celena\Module\Account;

use Celena\Core\Database\Connection;
use Celena\Core\Http\Flash;
use Celena\Core\Http\Response;
use Celena\Core\Security\Auth;
use Celena\Core\Template\Engine;
use Celena\Module\Settings\Options;

/**
 * База для фронтовых контроллеров кабинета и аутентификации посетителя.
 * Инкапсулирует рендер в активной теме сайта с общими переменными
 * (site, page, flash). Глобаль `account` (гость/имя) добавляется хуком
 * template.globals в bootstrap.php — отдельно прокидывать не нужно.
 */
abstract class AccountBaseController
{
    public function __construct(
        protected readonly Engine $engine,
        protected readonly Auth $auth,
        protected readonly Options $options,
        protected readonly Connection $conn,
    ) {
    }

    /**
     * @param array<string, mixed> $vars
     */
    protected function render(string $template, array $vars, string $title): Response
    {
        $this->engine->setTheme((string) $this->options->get('theme', 'default'));
        $base = [
            'site' => [
                'name' => (string) $this->options->get('site_name', ''),
                'url'  => (string) $this->options->get('site_url', ''),
            ],
            'page' => [
                'title'           => $title,
                'seo_title'       => $title,
                'seo_description' => '',
                'og_image'        => '',
            ],
            'flash' => Flash::pull(),
        ];
        return Response::html($this->engine->render($template, array_merge($base, $vars)));
    }
}
