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, calculate_financial_year, check_user_access, format_date_month_year, select_row
from store.models import *
from scheme.models import *
from django.http import HttpResponseRedirect
from supplier.models import *
from customer.models import *

# ***************************************************************************************************************************

def sales_return_report(request):
    if 'user_id' in request.session:
        user_type = request.session.get('user_type')
        branch_id = request.session.get('branch_id')
        is_ho = request.session.get('is_ho')

        if is_ho == 1:
            branches = branch_table.objects.filter(status=1).order_by('name')
        else:
            branches = branch_table.objects.filter(status=1, id=branch_id).order_by('name')

        customers = customer_table.objects.filter(status=1).order_by('name')

        return render(request, 'sales_return_report.html', {'branches': branches, 'customers': customers})
    else:
        return HttpResponseRedirect("/")

def ajax_sales_return_report(request):
    role_id = request.session.get('role_id')
    branch_id = request.session.get('branch_id')
    is_ho = request.session.get('is_ho')
    fyf_name = request.session.get('fyf')
    financial_year = calculate_financial_year(fyf_name)
    
    has_access, error_message = check_user_access(role_id, 'sales_return_report', "read")
    if not has_access:
        return JsonResponse({'message': 'permission', 'error_message': 'You do not have permission to view this report'})

    # Get filter parameters
    from_date = request.POST.get('from_date')
    to_date = request.POST.get('to_date')
    selected_branch_id = request.POST.get('branch_id')
    selected_customer_id = request.POST.get('customer_id')

    # Query tm_sales_return for filters
    tm_query = Q(status=1)
    if is_ho == 0 or is_ho == '0':
        tm_query &= Q(branch_id=branch_id)
    elif selected_branch_id:
        tm_query &= Q(branch_id=selected_branch_id)
    
    if selected_customer_id:
        tm_query &= Q(customer_id=selected_customer_id)
    
    if from_date and to_date:
        tm_query &= Q(sr_date__range=[from_date, to_date])

    tm_returns = sales_return_table.objects.filter(tm_query).values('id', 'branch_id', 'customer_id', 'sr_date', 'sr_no')
    tm_return_ids = [tm['id'] for tm in tm_returns]
    tm_map = {tm['id']: tm for tm in tm_returns}

    if not tm_return_ids:
        return JsonResponse({'data': []})

    # Query tx_sales_return
    child_items = child_sales_return_table.objects.filter(
        status=1,
        tm_return_id__in=tm_return_ids
    ).values(
        'tm_return_id', 'subcategory_id', 'brand_id', 'model_id', 'variant_id', 'color_id',
        'imei_no', 'rate', 'tax_amount', 'amount', 'tax_cgst', 'tax_sgst','sales_id'
    )

    formatted_data = []
    for idx, item in enumerate(child_items):
        tm_data = tm_map.get(item['tm_return_id'], {})
        tm_sales = select_row(sales_order_table,{'id':item['sales_id']})
        
        formatted_data.append({
            'sl_no': idx + 1,
            'invoice_no': (
                f"<a href='javascript:void(0);' "
                f"class='invoice-link text-primary fw-semibold' "
                f"onclick='sales_data({tm_sales.id})'>"
                f"{tm_sales.inv_no}</a>"
            ),
             'return_no': (
                f"<a href='javascript:void(0);' "
                f"class='invoice-link text-primary fw-semibold' "
                f"onclick='sales_return_data({tm_data.get('id')})'>"
                f"{tm_data.get('sr_no')}</a>"
            ),
            'invoice_date': format_date_month_year(tm_sales.inv_date),
            'date': format_date_month_year(tm_data.get('sr_date')),
            # 'return_no': tm_data.get('sr_no'),
            'branch': getItemNameById(branch_table, tm_data.get('branch_id')),
            'customer': getItemNameById(customer_table, tm_data.get('customer_id')),
            'subcategory': getItemNameById(sub_category_table, item['subcategory_id']),
            'brand': getItemNameById(brand_table, item['brand_id']),
            'model': getItemNameById(model_table, item['model_id']),
            'variant': getItemNameById(variant_table, item['variant_id']),
            'color': getItemNameById(color_table, item['color_id']),
            'imei': item['imei_no'] if item['imei_no'] else '-',
            'rate': format_amount(item['rate']),
            'tax_cgst': format_amount(item['tax_cgst']),
            'tax_sgst': format_amount(item['tax_sgst']),
            'tax_igst': 0.00,
            'amount': format_amount(item['amount'])
        })

    return JsonResponse({'data': formatted_data})
