<?php

namespace MintyPHP\Service\Settings;

class SettingGateway
{
    public function __construct(private readonly SettingService $settingService)
    {
    }

    public function get(string $key): ?array
    {
        return $this->settingService->get($key);
    }

    public function getValue(string $key): ?string
    {
        return $this->settingService->getValue($key);
    }

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

    public function setDefaultTenantId(?int $tenantId, ?string $description = null): bool
    {
        return $this->settingService->setDefaultTenantId($tenantId, $description);
    }

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

    public function setDefaultRoleId(?int $roleId, ?string $description = null): bool
    {
        return $this->settingService->setDefaultRoleId($roleId, $description);
    }

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

    public function setDefaultDepartmentId(?int $departmentId, ?string $description = null): bool
    {
        return $this->settingService->setDefaultDepartmentId($departmentId, $description);
    }

    public function getAppTitle(): ?string
    {
        return $this->settingService->getAppTitle();
    }

    public function setAppTitle(?string $title, ?string $description = null): bool
    {
        return $this->settingService->setAppTitle($title, $description);
    }

    public function getAppLocale(): ?string
    {
        return $this->settingService->getAppLocale();
    }

    public function setAppLocale(?string $locale, ?string $description = null): bool
    {
        return $this->settingService->setAppLocale($locale, $description);
    }

    public function getAppTheme(): ?string
    {
        return $this->settingService->getAppTheme();
    }

    public function setAppTheme(?string $theme, ?string $description = null): bool
    {
        return $this->settingService->setAppTheme($theme, $description);
    }

    public function isUserThemeAllowed(): bool
    {
        return $this->settingService->isUserThemeAllowed();
    }

    public function setUserThemeAllowed(bool $allowed, ?string $description = null): bool
    {
        return $this->settingService->setUserThemeAllowed($allowed, $description);
    }

    public function isRegistrationEnabled(): bool
    {
        return $this->settingService->isRegistrationEnabled();
    }

    public function setRegistrationEnabled(bool $allowed, ?string $description = null): bool
    {
        return $this->settingService->setRegistrationEnabled($allowed, $description);
    }

    public function getApiTokenDefaultTtlDays(): int
    {
        return $this->settingService->getApiTokenDefaultTtlDays();
    }

    public function setApiTokenDefaultTtlDays(?int $days, ?string $description = null): bool
    {
        return $this->settingService->setApiTokenDefaultTtlDays($days, $description);
    }

    public function getApiTokenMaxTtlDays(): int
    {
        return $this->settingService->getApiTokenMaxTtlDays();
    }

    public function setApiTokenMaxTtlDays(?int $days, ?string $description = null): bool
    {
        return $this->settingService->setApiTokenMaxTtlDays($days, $description);
    }

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

    public function setUserInactivityDeactivateDays(?int $days, ?string $description = null): bool
    {
        return $this->settingService->setUserInactivityDeactivateDays($days, $description);
    }

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

    public function setUserInactivityDeleteDays(?int $days, ?string $description = null): bool
    {
        return $this->settingService->setUserInactivityDeleteDays($days, $description);
    }

    public function getApiCorsAllowedOrigins(): array
    {
        return $this->settingService->getApiCorsAllowedOrigins();
    }

    public function getApiCorsAllowedOriginsText(): string
    {
        return $this->settingService->getApiCorsAllowedOriginsText();
    }

    public function setApiCorsAllowedOrigins(?string $rawOrigins, ?string $description = null): bool
    {
        return $this->settingService->setApiCorsAllowedOrigins($rawOrigins, $description);
    }

    public function getMicrosoftSharedClientId(): ?string
    {
        return $this->settingService->getMicrosoftSharedClientId();
    }

    public function setMicrosoftSharedClientId(?string $clientId, ?string $description = null): bool
    {
        return $this->settingService->setMicrosoftSharedClientId($clientId, $description);
    }

    public function getMicrosoftSharedClientSecret(): ?string
    {
        return $this->settingService->getMicrosoftSharedClientSecret();
    }

    public function setMicrosoftSharedClientSecret(?string $secret, ?string $description = null): bool
    {
        return $this->settingService->setMicrosoftSharedClientSecret($secret, $description);
    }

    public function getMicrosoftAuthority(): string
    {
        return $this->settingService->getMicrosoftAuthority();
    }

    public function setMicrosoftAuthority(?string $authority, ?string $description = null): bool
    {
        return $this->settingService->setMicrosoftAuthority($authority, $description);
    }

    public function getAppPrimaryColor(): ?string
    {
        return $this->settingService->getAppPrimaryColor();
    }

    public function setAppPrimaryColor(?string $color, ?string $description = null): bool
    {
        return $this->settingService->setAppPrimaryColor($color, $description);
    }

    public function getSmtpHost(): ?string
    {
        return $this->settingService->getSmtpHost();
    }

    public function setSmtpHost(?string $host, ?string $description = null): bool
    {
        return $this->settingService->setSmtpHost($host, $description);
    }

    public function getSmtpPort(): ?int
    {
        return $this->settingService->getSmtpPort();
    }

    public function setSmtpPort(?int $port, ?string $description = null): bool
    {
        return $this->settingService->setSmtpPort($port, $description);
    }

    public function getSmtpUser(): ?string
    {
        return $this->settingService->getSmtpUser();
    }

    public function setSmtpUser(?string $user, ?string $description = null): bool
    {
        return $this->settingService->setSmtpUser($user, $description);
    }

    public function getSmtpPassword(): ?string
    {
        return $this->settingService->getSmtpPassword();
    }

    public function setSmtpPassword(?string $password, ?string $description = null): bool
    {
        return $this->settingService->setSmtpPassword($password, $description);
    }

    public function getSmtpSecure(): ?string
    {
        return $this->settingService->getSmtpSecure();
    }

    public function setSmtpSecure(?string $secure, ?string $description = null): bool
    {
        return $this->settingService->setSmtpSecure($secure, $description);
    }

    public function getSmtpFrom(): ?string
    {
        return $this->settingService->getSmtpFrom();
    }

    public function setSmtpFrom(?string $from, ?string $description = null): bool
    {
        return $this->settingService->setSmtpFrom($from, $description);
    }

    public function getSmtpFromName(): ?string
    {
        return $this->settingService->getSmtpFromName();
    }

    public function setSmtpFromName(?string $fromName, ?string $description = null): bool
    {
        return $this->settingService->setSmtpFromName($fromName, $description);
    }
}
