from django.conf import settings
from rest_framework.settings import APISettings

USER_SETTINGS = getattr(settings, "PASSWORDLESS_AUTH", None)

DEFAULTS = {
    # Allowed auth types, can be EMAIL, MOBILE, or both.
    "PASSWORDLESS_AUTH_TYPES": ["EMAIL"],
    # Amount of time that tokens last, in seconds
    "PASSWORDLESS_TOKEN_EXPIRE_TIME": 15 * 60,
    # The user's email field name
    "PASSWORDLESS_USER_EMAIL_FIELD_NAME": "email",
    # The user's mobile field name
    "PASSWORDLESS_USER_MOBILE_FIELD_NAME": "mobile",
    # Marks itself as verified the first time a user completes auth via token.
    # Automatically unmarks itself if email is changed.
    "PASSWORDLESS_USER_MARK_EMAIL_VERIFIED": False,
    "PASSWORDLESS_USER_EMAIL_VERIFIED_FIELD_NAME": "email_verified",
    # Marks itself as verified the first time a user completes auth via token.
    # Automatically unmarks itself if mobile number is changed.
    "PASSWORDLESS_USER_MARK_MOBILE_VERIFIED": False,
    "PASSWORDLESS_USER_MOBILE_VERIFIED_FIELD_NAME": "mobile_verified",
    # The email the callback token is sent from
    "PASSWORDLESS_EMAIL_NOREPLY_ADDRESS": None,
    # The email subject
    "PASSWORDLESS_EMAIL_SUBJECT": "Your Login Token",
    # A plaintext email message overridden by the html message. Takes one string.
    "PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE": "Enter this token to sign in: %s",
    # The email template name.
    "PASSWORDLESS_EMAIL_TOKEN_HTML_TEMPLATE_NAME": "passwordless_default_token_email.html",
    # Your twilio number that sends the callback tokens.
    "PASSWORDLESS_MOBILE_NOREPLY_NUMBER": None,
    # The message sent to mobile users logging in. Takes one string.
    "PASSWORDLESS_MOBILE_MESSAGE": "Your SARLINK OTP is: %s \nPlease do not share this code with anyone.",
    # Registers previously unseen aliases as new users.
    "PASSWORDLESS_REGISTER_NEW_USERS": False,
    # Suppresses actual SMS for testing
    "PASSWORDLESS_TEST_SUPPRESSION": False,
    # Context Processors for Email Template
    "PASSWORDLESS_CONTEXT_PROCESSORS": [],
    # The verification email subject
    "PASSWORDLESS_EMAIL_VERIFICATION_SUBJECT": "Your Verification Token",
    # A plaintext verification email message overridden by the html message. Takes one string.
    "PASSWORDLESS_EMAIL_VERIFICATION_PLAINTEXT_MESSAGE": "Enter this verification code: %s",
    # The verification email template name.
    "PASSWORDLESS_EMAIL_VERIFICATION_TOKEN_HTML_TEMPLATE_NAME": "passwordless_default_verification_token_email.html",
    # The message sent to mobile users logging in. Takes one string.
    "PASSWORDLESS_MOBILE_VERIFICATION_MESSAGE": "Enter this verification code: %s",
    # Automatically send verification email or sms when a user changes their alias.
    "PASSWORDLESS_AUTO_SEND_VERIFICATION_TOKEN": False,
}

# List of settings that may be in string import notation.
IMPORT_STRINGS = (
    "PASSWORDLESS_EMAIL_TOKEN_HTML_TEMPLATE",
    "PASSWORDLESS_CONTEXT_PROCESSORS",
)

api_settings = APISettings(USER_SETTINGS, DEFAULTS, IMPORT_STRINGS)  # type: ignore