"""نرمال‌سازی شماره موبایل و کد OTP — مشترک بین Core و Identity."""
from __future__ import annotations

import re

MOBILE_PATTERN = re.compile(r"^09\d{9}$")


def normalize_otp_digits(value: str | None) -> str | None:
    if value is None:
        return None
    s = str(value).strip()
    if not s:
        return None
    persian = "۰۱۲۳۴۵۶۷۸۹"
    arabic = "٠١٢٣٤٥٦٧٨٩"
    latin = "0123456789"
    trans = str.maketrans(persian + arabic, latin + latin)
    s = s.translate(trans)
    s = "".join(c for c in s if c.isdigit())
    return s if s else None


def normalize_mobile(raw: str) -> str:
    """تبدیل به فرمت 09xxxxxxxxx."""
    digits = normalize_otp_digits(raw)
    if not digits:
        raise ValueError("شماره موبایل نامعتبر است")
    if digits.startswith("0098"):
        digits = digits[4:]
    elif digits.startswith("98") and len(digits) >= 12:
        digits = digits[2:]
    if len(digits) == 10 and not digits.startswith("0"):
        digits = "0" + digits
    if len(digits) == 11 and digits.startswith("0"):
        if not MOBILE_PATTERN.match(digits):
            raise ValueError("شماره موبایل باید با 09 شروع شود و ۱۱ رقم باشد")
        return digits
    raise ValueError("شماره موبایل باید با 09 شروع شود و ۱۱ رقم باشد")
