from django.db import transaction
from ..models import PoolEntry


def create_pool_entry(distributor_id, distribution_result):
    """
    Create a pool entry for a distributor if ENGAGEMENT_POOL amount > 0 and not already created.
    Args:
        distributor_id: DistributorID instance
        distribution_result: result from calculate_distribution
    Returns:
        PoolEntry instance or None
    """
    with transaction.atomic():
        breakdown = distribution_result.get('breakdown', [])
        pool_entry = next((entry for entry in breakdown if entry['type'] == 'ENGAGEMENT_POOL'), None)
        if not pool_entry:
            return None
        amount = pool_entry['amount']
        if amount is None or amount <= 0:
            return None
        # Prevent duplicate
        if PoolEntry.objects.filter(distributor=distributor_id).exists():
            return None
        global_position = distributor_id.global_position
        opportunity_bundle = getattr(distributor_id.product, 'opportunity_bundle', None)
        reference_id = pool_entry.get('reference_id') if pool_entry.get('reference_id') else None
        entry = PoolEntry.objects.create(
            distributor=distributor_id,
            global_position=global_position,
            opportunity_bundle=opportunity_bundle,
            amount=amount,
            reference_id=reference_id
        )
        return entry
