"""Auth-endpoint serializers."""

from __future__ import annotations

import re

from rest_framework import serializers


class LoginSerializer(serializers.Serializer):
    """Accepts ``identifier`` (mobile) + ``password``.

    The frontend sends ``identifier`` (Rule #1: payload keys stay neutral so
    we can later support username/phone without renaming).
    """

    identifier = serializers.CharField(required=True, allow_blank=False)
    password = serializers.CharField(
        required=True, allow_blank=False, write_only=True, style={"input_type": "password"}
    )


# ---------------------------------------------------------------------------
# Mobile OTP serializers
# ---------------------------------------------------------------------------

_E164_RE = re.compile(r"^\+[1-9]\d{6,14}$")


def _validate_e164(value: str) -> str:
    """Ensure the mobile number is in E.164 format."""
    if not _E164_RE.match(value):
        raise serializers.ValidationError(
            "شماره موبایل باید فرمت E.164 داشته باشد (مثال: +989123456789)"
        )
    return value


class OtpRequestSerializer(serializers.Serializer):
    """Request body for ``POST /auth/otp/request/``."""

    mobile = serializers.CharField(required=True, validators=[_validate_e164])


class OtpVerifySerializer(serializers.Serializer):
    """Request body for ``POST /auth/otp/verify/``."""

    token = serializers.UUIDField(required=True)
    code = serializers.CharField(required=True, min_length=4, max_length=8)
    mobile = serializers.CharField(required=True, validators=[_validate_e164])
