from enum import Enum
from src.core.config import settings
from typing import Dict


class API_PREFIXES(str, Enum):
    ADMIN = "/administrators"
    AUTH = "/auth"
    USER = "/users"
    MERCHANT = "/merchants"
    CUSTOMER = "/customers"
    PAYMENT_REQUEST = "/payment-requests"
    FILE = "/files"
    TILLED = "/tilled"
    SITE_MASTER = "/site-master"
    GEOCODING = "/geocoding"
    TRANSACTIONS = "/transactions"
    INVOICES = "/invoices"
    SETTINGS = "/settings"
    PAYMENT_METHOD = "/payment-methods"
    ROLE = "/roles"
    PERMISSION = "/permissions"
    RECEIPTS = "/receipts"
    REPORTS = "/reports"
    WEBHOOKS = "/webhooks"
    TEMPLATES = "/templates"
    REFUNDS = "/refunds"
    PRODUCTS = "/products"
    PLANS = "/plans"
    CATEGORIES = "/categories"
    AUTHORIZATION = "/authorizations"
    ADDRESSES = "/addresses"
    TAXES = "/taxes"
    TENDERS = "/payment_methods"
    PAYOUTS = "/payouts"
    REMINDER = "/reminder"
    CHECKOUT = "/checkouts"
    NOTES = "/notes"
    PAYER = "/payers"
    DISCOUNT = "/discounts"
    CLAUSE_GROUP_CATEGORY = "/categories"
    CLAUSE_GROUP = "/groups"
    CLAUSE = "/clauses"
    CONTRACTS = "/contracts"
    ACTIVITIES = "/activities"
    MESSAGES = "/messages"
    ADMIN_PLANS = "/administrators/plans"
    SITE_SETTINGS = "/site-settings"
    ADMIN_CUSTOMER = "/customer"


class MODULES(str, Enum):
    USER = "user"
    MERCHANT = "merchant"
    CUSTOMER = "customer"
    PAYMENT_REQUEST = "payment_request"
    SITE_MASTER = "site_master"
    SITE_SETTINGS = "site_settings"
    FILE = "file"
    GEOCODING = "geocoding"
    TRANSACTIONS = "transaction"
    INVOICES = "invoice"
    SETTINGS = "settings"
    ROLE = "role_permission"
    SITE_MASTER_INDUSTRY = "site_master_industry"
    PLAN = "plan"
    CHECKOUT = "checkout"
    DISCOUNT = "discount"
    TAX = "tax"
    TENDERS = "tenders"
    PAYER = "payer"
    CONTRACTS = "contracts"


class OPERATIONS(str, Enum):
    CREATE = "create"
    UPDATE = "update"
    LIST = "list"
    READ = "read"
    DELETE = "delete"


MAX_UPLOAD_LIMIT = 5
MAX_UPLOAD_SIZE_MB = 5
MAX_UPLOAD_RESOLUTION = (128, 128)
THUMBNAIL_ALLOWED_FILE_CONTENT_TYPES = ["image/jpeg", "image/png"]
THUMBNAIL_MAX_FILE_SIZE_BYTES = 512
ALLOWED_FILE_CONTENT_TYPES = [
    "png",
    "jpg",
    "jpeg",
    "pdf",
    "csv",
    "zip",
    "x-zip",
    "x-zip-compressed",
    "octet-stream",
]
DEFAULT_PER_PAGE = 10
MAX_PER_PAGE = 999999
DEFAULT_STATUS_TEXT = "expired"
DEFAULT_CONTRACT_STATUS_TEXT = "created"
ALLOWED_HOSTS = [
    "localhost",  # For development purposes only
    "localhost:3000",
    "localhost:5173",
    "fluxpay.com",
    "www.fluxpay.com",
    "fluxpay-dev.glohtesting.com",
    "fluxpay-v2-dev.dreamztesting.com",
    "127.0.0.1",
]
RESTRICTED_HOSTNAMES = [
    "localhost",
    "local",
    "host",
    "api",
    "ui",
    "apis",
    "admin",
    "admins",
    "administrator",
    "administrators",
    "info",
    "mail",
    "email",
    "mailing",
    "emailing",
    "info",
    "information",
    "home",
    "web",
    "net",
    "internet",
    "intranet",
    "test",
    "get",
    "post",
    "put",
    "delete",
    "options",
    "patch",
    "modify",
    "customer",
    "client",
    "user",
    "merchant",
    "password",
    "email",
    "domain",
    "subdomain",
    "date",
    "text",
    "number",
    "float",
    "int",
    "string",
    "str",
    "datetime",
    "flux",
    "fluxpay",
    "admin-panel",
    "dashboard",
    "control-panel",
    "management",
    "support",
    "help",
    "billing",
    "payment",
    "checkout",
    "account",
    "profile",
    "settings",
    "backup",
    "restore",
    "archive",
    "storage",
    "repository",
    "database",
    "db",
    "cache",
    "memcache",
    "memcached",
    "redis",
    "queue",
    "job",
    "task",
    "process",
    "worker",
    "scheduler",
    "cron",
    "log",
    "logs",
    "logging",
    "metrics",
    "analytics",
    "security",
    "auth",
    "authentication",
    "authorization",
    "login",
    "signin",
    "signup",
    "register",
    "logout",
    "signout",
    "encryption",
    "ssl",
    "tls",
    "firewall",
    "loadbalancer",
    "vpn",
    "ssh",
    "user",
    "role",
    "permission",
    "group",
    "team",
    "organization",
    "company",
    "corporation",
    "enterprise",
    "startup",
    "medium-business",
    "large-business",
    "industry",
    "sector",
    "market",
    "economy",
    "finance",
    "bank",
    "financial-institution",
    "investment",
    "insurance",
    "accounting",
    "auditing",
    "tax",
    "taxation",
    "decryption",
    "hashing",
    "signature",
    "verification",
    "cdn",
]

ONBOARDING_META = [
    {
        "order": 0,
        "label": "General Info",
        "required_fieldset": [
            "business_name",
            "business_type",
            "category",
            "company_email",
            "company_phone",
            "company_website",
            "description",
            "founding_date",
            "industry",
            "legal_name",
            "locale",
            "percentage_of_sales_to_other_business",
            "region",
            "statement_descriptor",
            "tax_id",  # done
            "currency",
            "average_transaction_amount",
            "yearly_txn_volume",
            "high_transaction_amount",
            "bank_name",
            "bank_account_holder_name",
            "bank_account_owner_type",
            "bank_account_type",
            "bank_account_number",
            "bank_routing_number",
            "monthly_volume",
            # "purpose",
        ],
    },
    {
        "order": 1,
        "label": "Business Address",
        "required_fieldset": [
            "address_line_1",
            "state",
            "city",
            "zipcode",
            "country",
        ],  # done
    },
    {
        "order": 2,
        "label": "Business Owners",  # done
        "required_fieldset": [
            "first_name",
            "last_name",
            "phone",
            "job_title",
            "email",
            "percent_owned",
            "address_line_1",
            "state",
            "city",
            "zipcode",
            "country",
            "ssn",
            "dob",
        ],
    },
    {
        "order": 3,
        "label": "Payments",
        "required_fieldset": [
            "name_of_last_processor",
            "how_long_customer_receive_goods",
            "average_transaction_monthly_count",
            "highest_transaction_amount",
            "average_trnsaction_monthly_amount",
            "average_trnsaction_yearly_amount",
            "person_card_present",
            "moto_telephone",
            "website_ecommerce",
        ],
    },
    {
        "order": 4,
        "label": "Bank Account",
        "required_fieldset": ["bank_account_number", "bank_routing_number"],
    },
    {"order": 5, "label": "Documents", "required_fieldset": []},
    {"order": 6, "label": "Acceptance", "required_fieldset": []},
]


VISA_NAMES = [
    "visa",
    "Visa",
    "VISA",
]

AMERICAN_EXPRESS_NAMES = [
    "amex",
    "american express",
    "AmericanExpress",
    "American Express",
    "AMERICAN EXPRESS",
]

MASTERCARD_NAMES = [
    "mastercard",
    "Mastercard",
    "Master Card",
    "Maestro",
    "MASTERCARD",
]

MAIL_TEMPLATE_DEFAULTS: Dict = {
    "project_name": settings.APP_TITLE,
    "project_slogan": "Serving secure and fast payments since 2021",
    "project_address": "16B, NY Street, California",
    "project_link": str(settings.SERVER_FRONT),
    "terms_of_service": f"{str(settings.SERVER_FRONT)}/terms-of-service/",
    "privacy_policy": f"{str(settings.SERVER_FRONT)}/privacy/",
    "socials": "",
    "site_media_url": f"{str(settings.SERVER_FRONT)}/images/receipt",
    "support_email": settings.APP_SUPPORT_EMAIL,
    "support_phone": settings.APP_SUPPORT_PHONE,
    "template_primary_color": settings.APP_PRIMARY_COLOR,
    "template_secondary_color": settings.APP_SECONDARY_COLOR,
    "template_logo": settings.APP_LOGO,
    "template_footer_logo": settings.APP_LOGO_SECONDARY,
}
