
from cProfile import label
from itertools import count
from tabnanny import check
from django.contrib.auth import get_user_model
from django.db.models import Count

from base.models import Country, SubPublisherUser
from magazineapp.models import MagazineCommissionInfo, MagazineOrderinfo, MagazinePurchaseInfo
User = get_user_model()

def get_mgn_commision(active_user,userid):
    try:
        userrecord = User.objects.filter(id=active_user).last()  
        # print(userrecord,"<<<<<<<<<<")  
        # breakpoint()  
        if userrecord.roles_id == 4:
            try:
                subpubliser = SubPublisherUser.objects.filter(users=userid).last()
                if subpubliser:
                    publiserid = subpubliser.created_by_id
                    commission_info =  MagazineCommissionInfo.objects.filter(user_id=publiserid).last()
                    if commission_info:
                        commission = commission_info.magazine_commission
                        # print('Commission : ', commission)
                        return commission
                    else:
                        commission = 35
                        return commission
                else:
                    print('------------------')
                    return 35
            except SubPublisherUser.DoesNotExist:
                return 35
        elif userrecord.roles_id == 3:
            try:
                # subpubliser = SubPublisherUser.objects.filter(users=userid).last()                
                # if subpubliser:
                publiserid = userrecord.id
                # print(publiserid,"<<<<<<<<<<<< Publisher ID")
                commission_info =  MagazineCommissionInfo.objects.filter(user_id=publiserid).last()
                if commission_info:
                    commission = commission_info.magazine_commission
                    return commission
                else:
                    commission = 35
                    return commission
            except SubPublisherUser.DoesNotExist:
                return 35
        
        elif userrecord.roles_id in [1,2]:
            user_check = User.objects.filter(id=userid).last()
            if user_check:
                print(user_check,"<<<<<<<<<<<<<<<<<<<<<<User")
                if user_check.roles_id == 3:
                    commission_info =  MagazineCommissionInfo.objects.filter(user_id=user_check.id).last()
                    if commission_info:
                        return commission_info.magazine_commission
                    else:
                        countryid = user_check.country_id
                        country_data = Country.objects.filter(id=countryid).last()
                        if country_data:
                            check_commission_in_country = country_data.commission
                            if check_commission_in_country:
                                return check_commission_in_country
                            else:
                                return 35
                        else:
                            return 35
                elif user_check.roles_id == 4:
                    try:
                        subpubliser = SubPublisherUser.objects.filter(users=userid).last()
                        if subpubliser: 
                            publiserid = subpubliser.created_by_id
                            commission_info =  MagazineCommissionInfo.objects.filter(user_id=publiserid).last()
                            if commission_info:
                                return commission_info.magazine_commission
                            else:
                                countryid = user_check.country_id
                                country_data = Country.objects.filter(id=countryid).last()
                                if country_data:
                                    check_commission_in_country = country_data.commission
                                    if check_commission_in_country:
                                        return check_commission_in_country
                                    else:
                                        return 35
                                else:
                                    return 35
                        else:
                            return 35
                        
                    except SubPublisherUser.DoesNotExist:
                            return 35
                else:
                    return 35
            else:
                print("No User<<<<<<<<<<<<<<")
                return 35
    except User.DoesNotExist:
        return 35


def get_UserCount(user_queryset):
    sub_admin = []
    publisher = []
    sub_publisher = []
    labels = ['Sub Admin', 'Publisher', 'Sub Publisher']

    for q in user_queryset:
        if q.roles_id == 2:
            sub_admin.append(q)
        elif q.roles_id == 3:
            publisher.append(q)
        elif q.roles_id == 4:
            sub_publisher.append(q)
    
    data = [len(sub_admin), len(publisher), len(sub_publisher)]
    
    dataset = {
        'labels':labels,
        'data':data,
    }

    return dataset

def get_MostSellMagazines(magazine_queryset):
    magazine_labels = []
    magazine_data = []
    if magazine_queryset:
        mgnf = magazine_queryset.values_list('magazineInfos__name').annotate(truck_count=Count('magazineInfos__name')).order_by('-truck_count')[:5]
        # print(mgnf, "lkjhgfdsasdfghjklkjhgfdssdfghjklkjhgfddfghjhgfdsdfgh")
        for row in mgnf:
            # print(row[0],"-------------------")
            # print(row[1],"-------------------")
            magazine_labels.append(row[0])
            magazine_data.append(row[1])
    else:
        pass

    magazine_data = {
        'labels': magazine_labels,
        'data': magazine_data,}  

    return magazine_data



def TopMegazineCategories(category_queryset):
    labels=[]
    data=[]
    if category_queryset:
        filterdata=category_queryset.values_list('magazineInfos__magazine_category__category_name').annotate(truck_count=Count('magazineInfos__magazine_category__category_name')).order_by('-truck_count')[:5]
        print(filterdata) 
        for row in filterdata:
            labels.append(row[0])
            data.append(row[1])
    else:
        pass

    category_dataset = {
        'labels': labels,
        'data': data,
        }
    
    return category_dataset
   

   

