"""
Shared regex patterns used by multiple modules.
"""

import re

ISO_DATE_FORMAT = "^\d{4}-\d{2}-\d{2}$"  # YYYY-MM-DD
ISO_DATETIME_FORMAT = "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$"  # YYYY-MM-DD hh:mm:ss
STRONG_PASSWORD = r"[A-Za-z0-9@#$%^&+=]{8,}"
CUSTOMER_UNIQUE_ID = "^cus_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
CONTACT_UNIQUE_ID = "^con_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
MERCHANT_UNIQUE_ID = "^mer_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
USER_UNIQUE_ID = "^usr_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
PAYMENT_REQUEST_UNIQUE_ID = "^pr_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
PAYMENT_METHOD_UNIQUE_ID = "^pm_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
INVOICE_UNIQUE_ID = "^inv_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
TRANSACTION_UNIQUE_ID = "^trn_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
AUTHORIZATION_UNIQUE_ID = "^auth_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
CHECKOUT_UNIQUE_ID = "^chckt_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
CLAUSE_GROUP_UNIQUE_ID = "^clgr_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
CLAUSE_GROUP_CATEGORY_UNIQUE_ID = "^clcat_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
CONTRACT_UNIQUE_ID = "^ctr_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
RECEIPT_UNIQUE_ID = "^rct_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
TEMPLATE_UNIQUE_ID = "^tpl_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
TAX_UNIQUE_ID = "^tax_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
DISCOUNT_UNIQUE_ID = "^disc_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
PLAN_UNIQUE_ID = "^plan_[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
PRODUCT_SKU = "[^*|\":<>\\[\\]{}` \\\\()';@&$]+$"
HOSTNAME = (
    "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$"
)
PHONE_NUMBER = "^\+1\d{3}\d{3}\d{4}"
VALID_UUID_STRING = (
    "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$"
)


def test(value: str, pattern: str) -> bool:
    pattern = re.compile(pattern)
    return pattern.match(value)