"""Development / no-provider adapter.

Simulates a provider so the escrow + ledger flow can be exercised before the
AzamPay adapter exists. Never use in production — it always "succeeds".
"""

from uuid import uuid4

from .base import (
    CollectionIntent,
    DisbursementInstruction,
    PaymentProvider,
    ProviderResult,
)


def _ref() -> str:
    return f"MAN-{uuid4().hex[:12].upper()}"


class ManualProvider(PaymentProvider):
    name = "manual"

    def create_collection(self, intent: CollectionIntent) -> ProviderResult:
        return ProviderResult(intent.reference, "succeeded", _ref(), {"simulated": True})

    def get_collection_status(self, provider_ref: str) -> ProviderResult:
        return ProviderResult(provider_ref, "succeeded", provider_ref, {"simulated": True})

    def create_disbursement(self, instruction: DisbursementInstruction) -> ProviderResult:
        return ProviderResult(instruction.reference, "succeeded", _ref(), {"simulated": True})

    def get_disbursement_status(self, provider_ref: str) -> ProviderResult:
        return ProviderResult(provider_ref, "succeeded", provider_ref, {"simulated": True})

    def create_refund(self, instruction: DisbursementInstruction) -> ProviderResult:
        return ProviderResult(instruction.reference, "succeeded", _ref(), {"simulated": True})

    def verify_callback(self, request) -> bool:
        return False  # no authenticity guarantee; callbacks are inert in dev

    def normalize_callback(self, payload: dict) -> ProviderResult:
        return ProviderResult(
            payload.get("reference", ""),
            payload.get("status", "pending"),
            payload.get("provider_ref", ""),
            payload,
        )
