# coding: utf-8

"""
    Authress

    <p> <h2>Introduction</h2> <p>Welcome to the Authress Authorization API. <br>The Authress REST API provides the operations and resources necessary to create records, assign permissions, and verify any user in your platform.</p> <p><ul>   <li>Manage multitenant platforms and create user tenants for SSO connections.</li>   <li>Create records to assign roles and resources to grant access for users.</li>   <li>Check user access control by calling the authorization API at the right time.</li>   <li>Configure service clients to securely access services in your platform.</li> </ul></p> <p>For more in-depth scenarios check out the <a href=\"https://authress.io/knowledge-base\" target=\"_blank\">Authress knowledge base</a>.</p> </p>

    The version of the OpenAPI document: v1
    Contact: support@authress.io
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


from __future__ import annotations
import pprint
import re  # noqa: F401
import json


from typing import Optional
from pydantic import BaseModel, Field, constr, validator

try:
    from pydantic.v1 import BaseModel, Field, constr, validator
except ImportError:
    from pydantic import BaseModel, Field, constr, validator

class AuthenticationTokenConfiguration(BaseModel):
    """
    AuthenticationTokenConfiguration
    """
    access_token_duration: Optional[constr(strict=True)] = Field(default='PT24H', alias="accessTokenDuration", description="How long should Authress generated access tokens (JWTs) last for in minutes. This controls how often tokens expiry (*exp*). The default is 24 hours. The minimum is one minute and the max is twenty-four hours.")
    session_duration: Optional[constr(strict=True)] = Field(default='P30D', alias="sessionDuration", description="How long should user authentication sessions last for in minutes. This controls how often users are forced to log in again. User sessions are optimized to provide the best user experience for your application. The default is 90 days. The minimum is one minute and the max is 90 days.")
    __properties = ["accessTokenDuration", "sessionDuration"]

    @validator('access_token_duration')
    def access_token_duration_validate_regular_expression(cls, value):
        """Validates the regular expression"""
        if value is None:
            return value

        if not re.match(r"^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d+[HMS])(\d+H)?(\d+M)?(\d+S)?)?$", value):
            raise ValueError(r"must validate the regular expression /^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d+[HMS])(\d+H)?(\d+M)?(\d+S)?)?$/")
        return value

    @validator('session_duration')
    def session_duration_validate_regular_expression(cls, value):
        """Validates the regular expression"""
        if value is None:
            return value

        if not re.match(r"^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d+[HMS])(\d+H)?(\d+M)?(\d+S)?)?$", value):
            raise ValueError(r"must validate the regular expression /^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d+[HMS])(\d+H)?(\d+M)?(\d+S)?)?$/")
        return value

    class Config:
        """Pydantic configuration"""
        allow_population_by_field_name = True
        validate_assignment = True

    def to_str(self) -> str:
        """Returns the string representation of the model using alias"""
        return pprint.pformat(self.dict(by_alias=True))

    def to_json(self) -> str:
        """Returns the JSON representation of the model using alias"""
        return json.dumps(self.to_dict())

    @classmethod
    def from_json(cls, json_str: str) -> AuthenticationTokenConfiguration:
        """Create an instance of AuthenticationTokenConfiguration from a JSON string"""
        return cls.from_dict(json.loads(json_str))

    def to_dict(self):
        """Returns the dictionary representation of the model using alias"""
        _dict = self.dict(by_alias=True,
                          exclude={
                          },
                          exclude_none=True)
        # set to None if access_token_duration (nullable) is None
        # and __fields_set__ contains the field
        if self.access_token_duration is None and "access_token_duration" in self.__fields_set__:
            _dict['accessTokenDuration'] = None

        # set to None if session_duration (nullable) is None
        # and __fields_set__ contains the field
        if self.session_duration is None and "session_duration" in self.__fields_set__:
            _dict['sessionDuration'] = None

        return _dict

    @classmethod
    def from_dict(cls, obj: dict) -> AuthenticationTokenConfiguration:
        """Create an instance of AuthenticationTokenConfiguration from a dict"""
        if obj is None:
            return None

        if not isinstance(obj, dict):
            return AuthenticationTokenConfiguration.parse_obj(obj)

        _obj = AuthenticationTokenConfiguration.parse_obj({
            "access_token_duration": obj.get("accessTokenDuration") if obj.get("accessTokenDuration") is not None else 'PT24H',
            "session_duration": obj.get("sessionDuration") if obj.get("sessionDuration") is not None else 'P30D'
        })
        return _obj


