"""Wallet-specific hook context for django-hooks integration."""

from __future__ import annotations

from dataclasses import dataclass, field
from decimal import Decimal
from typing import Any, Dict, Optional

# Import the generic hook system
from django_package_hooks import HookRegistry as BaseHookRegistry


@dataclass(frozen=True)
class HookContext:
    """
    Immutable context passed to hooks containing transaction details.

    All transaction parameters are frozen to prevent hooks from modifying them.
    Use metadata dict to share data between hooks.
    """

    # Operation type
    operation: str  # 'add', 'deduct', 'transfer'

    # User and point type
    user_id: int
    point_type: str

    # Transaction details
    amount: Decimal
    remarks: str
    trans_type: Optional[int]
    iid: int  # initiator id

    # Transfer-specific fields (None for add/deduct)
    to_user_id: Optional[int] = None
    to_point_type: Optional[str] = None

    # Additional params
    params: Dict[str, Any] = field(default_factory=dict)

    # Mutable metadata bus for inter-hook communication
    metadata: Dict[str, Any] = field(default_factory=dict)

    # Current balance (fetched before transaction)
    current_balance: Optional[Decimal] = None


class WalletHookRegistry(BaseHookRegistry):
    """
    Wallet-specific hook registry that extends the base registry.
    
    Adds wallet operations: 'add', 'deduct', 'transfer', and '*' (all)
    """
    
    def __init__(self):
        super().__init__(operations=["add", "deduct", "transfer", "*"])
