from django.shortcuts import render
from django.http import JsonResponse
from django.db.models import Q
from inventory.models import *
from sales.models import *
from material.models import *
from stock.models import *
from masters.models import *
from common.utils import selectList, getItemNameById, format_amount, get_final_price_for_imei
from masters.models import *
from store.models import *
from scheme.models import *
from django.http import HttpResponseRedirect
from common.utils import *
from supplier.models import *

# ***************************************************************************************************************************

def price_drop_report(request):
    if 'user_id' in request.session:
        user_type = request.session.get('user_type')
        branch_id = request.session.get('branch_id')

        branch = selectList(branch_table, order_by='name')
        category = selectList(category_table)
        sub_category = selectList(sub_category_table)
        brand = selectList(brand_table)
        return render(request, 'price_drop_report.html',{'branch':branch,'category':category,'sub_category':sub_category,'brand':brand })
        
        
    else:
        return HttpResponseRedirect("/")
    

def ajax_price_drop_report(request):
  
    role_id = request.session.get('role_id')
    branch_id = request.session.get('branch_id')
    fyf_name = request.session.get('fyf')
    financial_year = calculate_financial_year(fyf_name)
    has_access, error_message = check_user_access(role_id, 'price_drop', "read")

    if not has_access:
        return JsonResponse({
            'message': 'permission',
            'error_message': 'You do not have permission to view Price Drop details'
        })

    # Get filter parameters
    brand_id = request.POST.get('brand_id')
    model_id = request.POST.get('model_id')
    variant_id = request.POST.get('variant_id')
    from_date = request.POST.get('from_date')
    to_date = request.POST.get('to_date')
    query = Q(status=1)

    # Apply filters to query
    if brand_id:
        query &= Q(brand_id=brand_id)
    if model_id:
        query &= Q(model_id=model_id)
    if variant_id:
        query &= Q(variant_id=variant_id)

    if from_date and to_date:
        query &= Q(from_date__range=[from_date, to_date])

    purchase_qs = price_history_table.objects.filter(query).values(
        'id', 'date', 'price_no', 'time',
        'supplier_id', 'brand_id', 'model_id', 'variant_id', 'subcategory_id'
    )
    purchase_ids = [p['id'] for p in purchase_qs]
    if not purchase_ids:
        return JsonResponse({'data': []})
    
    purchase_map = {p['id']: p for p in purchase_qs}
    item_qs = item_table.objects.filter(
        status=1,
        is_active=1
    ).values(
        'sub_category_id',
        'brand_id',
        'model_id',
        'variant_id',
        'sku_text'
    )

    item_map = {
        (
            i['sub_category_id'],
            i['brand_id'],
            i['model_id'],
            i['variant_id'],
        ): i['sku_text']
        for i in item_qs
    }

    child_qs = tx_price_history_table.objects.filter(
        status=1,
        branch_id=branch_id,
        current_fy=financial_year,
        tm_price_id__in=purchase_ids
    ).values()

    formatted = []
    for index, item in enumerate(child_qs):
        purchase = purchase_map.get(item['tm_price_id'], {})
        sku_key = (
            purchase.get('subcategory_id'),
            purchase.get('brand_id'),
            purchase.get('model_id'),
            purchase.get('variant_id'),
        )
        sku = item_map.get(sku_key, '-')
        formatted.append(
            {
                'id': index + 1,                
                'from_date': format_date_month_year(purchase['date']) if purchase['date'] else '-',
                'branch': getItemNameById(branch_table, item['supply_branch_id']),
                'supplier': getItemNameById(supplier_table, purchase['supplier_id']),
                'sku': sku,
                'sub_category': getItemNameById(sub_category_table, purchase['subcategory_id']),
                'brand': getItemNameById(brand_table, purchase['brand_id']),
                'model': getItemNameById(model_table, purchase['model_id']),
                'variant': getItemNameById(variant_table, purchase['variant_id']),

                'before_mop': format_amount(item['mop']) if item['mop'] else '-',
                'before_bop': format_amount(item['bop']) if item['bop'] else '-',
                'before_fsp': format_amount(item['fsp']) if item['fsp'] else '-',
                'before_wsp': format_amount(item['wsp']) if item['wsp'] else '-',

                'drop_mop': format_amount(item['mop_discount']) if item['mop_discount'] else '-',
                'drop_bop': format_amount(item['bop_discount']) if item['bop_discount'] else '-',
                'drop_fsp': format_amount(item['fsp_discount']) if item['fsp_discount'] else '-',
                'drop_wsp': format_amount(item['wsp_discount']) if item['wsp_discount'] else '-',

                'after_mop': format_amount(item['mop_after_discount']) if item['mop_after_discount'] else '-',
                'after_bop': format_amount(item['bop_after_discount']) if item['bop_after_discount'] else '-',
                'after_fsp': format_amount(item['fsp_after_discount']) if item['fsp_after_discount'] else '-',
                'after_wsp': format_amount(item['wsp_after_discount']) if item['wsp_after_discount'] else '-',

                'credit_note': ''
               
            }
        )

    return JsonResponse({'data': formatted})


