"""
Wallet point transaction utilities (Python port of WalletPoint).

Install (from your Django backend folder):
    pip install -e ../packages/wallet_utils

Usage:
    from wallet_utils import WalletService, WalletRepository
    from wallet_utils.exceptions import (
        InsufficientBalanceError,
        InvalidPointTypeError,
        InvalidParamsError,
        WalletOperationError,
    )
    from your_app.models import User
    
    # Define point types and their decimal places
    point_types = {
        "credit_balance": 2,
        "reward_points": 0,
    }
    
    # Create repository (only needs point types definition)
    repo = WalletRepository(
        user_model=User,
        point_types=point_types,
    )
    
    # Use the service
    service = WalletService(repo)
    transaction_id = service.add_point(
        user_id=123,
        point_type="credit_balance",
        amount=Decimal("100.00"),
        remarks="Deposit",
    )
"""

from .exceptions import (
    InsufficientBalanceError,
    InvalidParamsError,
    InvalidPointTypeError,
    WalletOperationError,
)
from .repository import WalletRepository, WalletRepositoryProtocol
from .service import TransactionRecord, WalletService
from .transaction_types import (
    TRANSACTION_TYPES,
    TRANSACTION_TYPE_NAMES,
    get_transaction_type,
    get_transaction_type_name,
    # Wallet Operations
    WALLET_DEPOSIT,
    WALLET_DEPOSIT_CANCEL,
    WALLET_TRANSFER,
    WALLET_WITHDRAW,
    WALLET_WITHDRAW_REFUND,
    WALLET_ADJUST,
    WALLET_TOPUP,
    WALLET_DEDUCT,
    # Package Operations
    PACKAGE_ACTIVATION,
    PACKAGE_ACTIVATION_CANCEL,
    PACKAGE_UPGRADE,
    PACKAGE_UPGRADE_CANCEL,
    PACKAGE_RENEWAL,
    PACKAGE_RENEWAL_CANCEL,
    PACKAGE_EXPIRY_REFUND,
    # Commission & Rewards
    COMMISSION_DISTRIBUTION,
    COMMISSION_DISTRIBUTION_REVERSE,
    ROI_DISTRIBUTION,
    ROI_DISTRIBUTION_REVERSE,
    REFERRAL_BONUS,
    REFERRAL_BONUS_REVERSE,
    MATCHING_BONUS,
    MATCHING_BONUS_REVERSE,
    LEADERSHIP_BONUS,
    LEADERSHIP_BONUS_REVERSE,
    PROMOTION_BONUS,
    PROMOTION_BONUS_REVERSE,
    # Product Operations
    PRODUCT_ORDER,
    PRODUCT_ORDER_CANCEL,
    PRODUCT_ORDER_REFUND,
    PRODUCT_REDEMPTION,
    PRODUCT_REDEMPTION_CANCEL,
    PRODUCT_EXCHANGE,
    PRODUCT_EXCHANGE_REVERSE,
    # System Operations
    SYSTEM_ADJUSTMENT,
    SYSTEM_REWARD,
    SYSTEM_PENALTY,
    SYSTEM_REVERSAL,
    SYSTEM_MIGRATION,
    # Payment Operations
    PAYMENT_RECEIVED,
    PAYMENT_REFUND,
    PAYMENT_FAILED_REFUND,
    PAYMENT_CHARGEBACK,
    PAYMENT_CHARGEBACK_REVERSAL,
    # Loan & Credit Operations
    LOAN_DISBURSEMENT,
    LOAN_REPAYMENT,
    LOAN_WRITE_OFF,
    CREDIT_LIMIT_INCREASE,
    CREDIT_LIMIT_DECREASE,
    # Exchange & Conversion
    CURRENCY_EXCHANGE,
    POINT_CONVERSION,
    POINT_CONVERSION_REVERSE,
    BONUS_CONVERSION,
    BONUS_CONVERSION_REVERSE,
    # Fee Operations
    TRANSACTION_FEE,
    TRANSACTION_FEE_REFUND,
    WITHDRAWAL_FEE,
    WITHDRAWAL_FEE_REFUND,
    TRANSFER_FEE,
    TRANSFER_FEE_REFUND,
    MAINTENANCE_FEE,
    MAINTENANCE_FEE_REFUND,
)

__all__ = [
    "InsufficientBalanceError",
    "InvalidParamsError",
    "InvalidPointTypeError",
    "TransactionRecord",
    "TRANSACTION_TYPES",
    "TRANSACTION_TYPE_NAMES",
    "get_transaction_type",
    "get_transaction_type_name",
    # Wallet Operations
    "WALLET_DEPOSIT",
    "WALLET_DEPOSIT_CANCEL",
    "WALLET_TRANSFER",
    "WALLET_WITHDRAW",
    "WALLET_WITHDRAW_REFUND",
    "WALLET_ADJUST",
    "WALLET_TOPUP",
    "WALLET_DEDUCT",
    # Package Operations
    "PACKAGE_ACTIVATION",
    "PACKAGE_ACTIVATION_CANCEL",
    "PACKAGE_UPGRADE",
    "PACKAGE_UPGRADE_CANCEL",
    "PACKAGE_RENEWAL",
    "PACKAGE_RENEWAL_CANCEL",
    "PACKAGE_EXPIRY_REFUND",
    # Commission & Rewards
    "COMMISSION_DISTRIBUTION",
    "COMMISSION_DISTRIBUTION_REVERSE",
    "ROI_DISTRIBUTION",
    "ROI_DISTRIBUTION_REVERSE",
    "REFERRAL_BONUS",
    "REFERRAL_BONUS_REVERSE",
    "MATCHING_BONUS",
    "MATCHING_BONUS_REVERSE",
    "LEADERSHIP_BONUS",
    "LEADERSHIP_BONUS_REVERSE",
    "PROMOTION_BONUS",
    "PROMOTION_BONUS_REVERSE",
    # Product Operations
    "PRODUCT_ORDER",
    "PRODUCT_ORDER_CANCEL",
    "PRODUCT_ORDER_REFUND",
    "PRODUCT_REDEMPTION",
    "PRODUCT_REDEMPTION_CANCEL",
    "PRODUCT_EXCHANGE",
    "PRODUCT_EXCHANGE_REVERSE",
    # System Operations
    "SYSTEM_ADJUSTMENT",
    "SYSTEM_REWARD",
    "SYSTEM_PENALTY",
    "SYSTEM_REVERSAL",
    "SYSTEM_MIGRATION",
    # Payment Operations
    "PAYMENT_RECEIVED",
    "PAYMENT_REFUND",
    "PAYMENT_FAILED_REFUND",
    "PAYMENT_CHARGEBACK",
    "PAYMENT_CHARGEBACK_REVERSAL",
    # Loan & Credit Operations
    "LOAN_DISBURSEMENT",
    "LOAN_REPAYMENT",
    "LOAN_WRITE_OFF",
    "CREDIT_LIMIT_INCREASE",
    "CREDIT_LIMIT_DECREASE",
    # Exchange & Conversion
    "CURRENCY_EXCHANGE",
    "POINT_CONVERSION",
    "POINT_CONVERSION_REVERSE",
    "BONUS_CONVERSION",
    "BONUS_CONVERSION_REVERSE",
    # Fee Operations
    "TRANSACTION_FEE",
    "TRANSACTION_FEE_REFUND",
    "WITHDRAWAL_FEE",
    "WITHDRAWAL_FEE_REFUND",
    "TRANSFER_FEE",
    "TRANSFER_FEE_REFUND",
    "MAINTENANCE_FEE",
    "MAINTENANCE_FEE_REFUND",
    "WalletOperationError",
    "WalletRepository",
    "WalletRepositoryProtocol",
    "WalletService",
]
