"""This file is used to store the default setting key-value pairs used for seeding
into database on request.
"""

import json
from typing import Dict, List
from src.core.utils.enums import SettingsInputFieldTypes


DEFAULT_SITE_SETTING: List[Dict] = [
    {
        "key": "no_of_contact_allowed",
        "value": 5,
        "label": "Total no of contact allowed",
        "group": "payment_terminal",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": False,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "card_tokenization_provider",
        "value": "tilledjs",
        "label": "Card Tokenization Provider",
        "group": "payment_terminal",
        "field_type": SettingsInputFieldTypes.SELECT,
        "field_options": json.dumps(
            [
                {"label": "Tilled JS", "value": "tilledjs"},
                {"label": "Basis Theory", "value": "basis_theory"},
            ]
        ),
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "ach_tokenization_provider",
        "value": "tilledjs",
        "label": "ACH Tokenization Provider",
        "group": "payment_terminal",
        "field_type": SettingsInputFieldTypes.SELECT,
        "field_options": json.dumps(
            [
                {"label": "Tilled JS", "value": "tilledjs"},
                {"label": "Basis Theory", "value": "basis_theory"},
            ]
        ),
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "split_tender_tokenization_provider",
        "value": "basis_theory",
        "label": "Split Tender Tokenization Provider",
        "group": "payment_terminal",
        "field_type": SettingsInputFieldTypes.SELECT,
        "field_options": json.dumps(
            [
                {"label": "Tilled JS", "value": "tilledjs"},
                {"label": "Basis Theory", "value": "basis_theory"},
            ]
        ),
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "suspend_account_when_subscription_fails",
        "value": "false",
        "label": "Suspend account when subscription fails",
        "group": "subscriptions_settings",
        "field_type": SettingsInputFieldTypes.CHECKBOX,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "allow_admins_to_upgrade_their_subscription",
        "value": "false",
        "label": "Allow admins to upgrade their subscription",
        "group": "subscriptions_settings",
        "field_type": SettingsInputFieldTypes.CHECKBOX,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "allow_admins_to_cancel_their_subscription",
        "value": "false",
        "label": "Allow admins to cancel their subscription",
        "group": "subscriptions_settings",
        "field_type": SettingsInputFieldTypes.CHECKBOX,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "pause_new_accounts",
        "value": "false",
        "label": "Pause New Accounts",
        "group": "security",
        "field_type": SettingsInputFieldTypes.CHECKBOX,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "two_factor_authentication",
        "value": "false",
        "label": "2-Factor Authentication",
        "group": "security",
        "field_type": SettingsInputFieldTypes.CHECKBOX,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "sms_carrier",
        "value": "telnyx",
        "label": "SMS Provider",
        "group": "carrier_cost",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "sms_carrier_cost",
        "value": 1.40,
        "label": "SMS Carrier Cost",
        "group": "carrier_cost",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "email_carrier",
        "value": "sendgrid",
        "label": "Email Provider",
        "group": "carrier_cost",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "email_carrier_cost",
        "value": 2.10,
        "label": "Email Carrier Cost",
        "group": "carrier_cost",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": False,
        "is_encrypted": False,
    },
    {
        "key": "password_reset_limit",
        "value": 5,
        "label": "Password Reset Limit",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "password_reset_timeout",
        "value": 604800,
        "label": "Password Reset Timeout",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "failed_login_attempt_limit",
        "value": 5,
        "label": "Failed Login Attempt Limit",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "login_block_duration",
        "value": 86400,
        "label": "Login Block Duration",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "rate_limit_max_requests",
        "value": 200,
        "label": "Rate Limit Max Requests",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "rate_limit_period",
        "value": 60,
        "label": "Rate Limit Period",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
    {
        "key": "block_duration",
        "value": 7200,
        "label": "Block Duration",
        "group": "security",
        "field_type": SettingsInputFieldTypes.INPUT,
        "field_options": None,
        "is_visible": True,
        "is_required": True,
        "is_encrypted": False,
    },
]
