from apps.product.models import Quota, QuotaLivestockAllocation
from apps.warehouse.models import InventoryEntry
import typing


def get_products_in_warehouse(organization_id):
    """ get list of products from organization warehouse """

    entries = InventoryEntry.objects.select_related(
        'distribution__quota__product'
    )

    product_objects = [
        entry.distribution.quota.product for entry in entries
    ]

    return list(set(product_objects))


def quota_live_stock_allocation_info(quota: Quota) -> typing.Any:
    """ information of quota live stock allocations """

    allocations = quota.livestock_allocations.filter(quota=quota)

    if allocations:
        allocations_list = [{
            "name": alloc.livestock_type.name,
            "quantity": alloc.quantity_kg
        } for alloc in allocations]

        return allocations_list


def quota_incentive_plans_info(quota: Quota) -> typing.Any:
    """ information of quota incentive plans """

    incentive_plans = quota.incentive_assignments.all()

    if incentive_plans:
        incentive_plans_list = [{
            'name': plan.incentive_plan.name,
            'heavy_value': plan.heavy_value,
            'light_value': plan.light_value
        } for plan in incentive_plans]

        return incentive_plans_list
