<?php

namespace MintyPHP\Service\User;

use MintyPHP\Service\Settings\SettingsAppGateway;
use MintyPHP\Service\Settings\SettingsDefaultsGateway;
use MintyPHP\Service\Settings\SettingsUserLifecycleGateway;

class UserSettingsGateway
{
    public function __construct(
        private readonly SettingsDefaultsGateway $settingsDefaultsGateway,
        private readonly SettingsAppGateway $settingsAppGateway,
        private readonly SettingsUserLifecycleGateway $settingsUserLifecycleGateway
    ) {
    }

    public function getDefaultTenantId(): ?int
    {
        return $this->settingsDefaultsGateway->getDefaultTenantId();
    }

    public function getDefaultRoleId(): ?int
    {
        return $this->settingsDefaultsGateway->getDefaultRoleId();
    }

    public function getDefaultDepartmentId(): ?int
    {
        return $this->settingsDefaultsGateway->getDefaultDepartmentId();
    }

    /**
     * @return array<string, string>
     */
    public function appThemes(): array
    {
        return $this->settingsAppGateway->listThemes();
    }

    public function defaultTheme(): string
    {
        return $this->settingsAppGateway->resolveDefaultTheme();
    }

    public function normalizeTheme(?string $theme): string
    {
        return $this->settingsAppGateway->normalizeTheme($theme);
    }

    public function getUserInactivityDeactivateDays(): int
    {
        return $this->settingsUserLifecycleGateway->getUserInactivityDeactivateDays();
    }

    public function getUserInactivityDeleteDays(): int
    {
        return $this->settingsUserLifecycleGateway->getUserInactivityDeleteDays();
    }

    public function recordLifecycleLastRun(string $createdAtUtc, string $status): bool
    {
        return $this->settingsUserLifecycleGateway->recordLastRun($createdAtUtc, $status);
    }

    /**
     * @return array{created_at: string, status: string}|null
     */
    public function getLifecycleLastRun(): ?array
    {
        return $this->settingsUserLifecycleGateway->getLastRun();
    }
}
