from pydantic import Field, SecretStr
from pydantic_settings import BaseSettings

from rvpc.auth.utils import require_env


class RabbitMQSettings(BaseSettings):
    password: SecretStr = Field()
    user: SecretStr = Field()
    service: SecretStr = Field()

    @property
    def url(self) -> str:
        return f"://{self.user.get_secret_value()}:{self.password.get_secret_value()}@{self.service.get_secret_value()}//"

    @property
    def broker_url(self) -> str:
        return f"amqp{self.url}"

    @property
    def back_url(self) -> str:
        return f"rpc{self.url}"


rmq_settings = RabbitMQSettings(
    password=require_env("RABBITMQ_PWD"),
    user=require_env("RABBITMQ_USER"),
    service=require_env("RABBITMQ_SERVICE"),
)


class MailSettings(BaseSettings):
    user: SecretStr = Field()
    password: SecretStr = Field()
    name: SecretStr = Field()


mail_settings = MailSettings(
    user=require_env("MAIL_USERNAME"),
    password=require_env("MAIL_PASSWORD"),
    name=require_env("MAIL_NAME"),
)
