from django.shortcuts import render, HttpResponseRedirect
from django.http import JsonResponse
from django.db import connection
from common.utils import check_user_access, format_amount
import json

def wholesale_imei_stock_list(request):
    if 'user_id' in request.session:
        from masters.models import sub_category_table, brand_table
        from store.models import branch_table
        
        sub_category = sub_category_table.objects.filter(status=1, is_active=1).order_by('name')
        brand = brand_table.objects.filter(status=1, is_active=1).order_by('name')
        branch = branch_table.objects.filter(status=1, is_active=1).order_by('name')
        
        return render(request, 'wholesale_imei_stock.html', {
            'sub_category': sub_category,
            'brand': brand,
            'branch': branch
        })
    else:
        return HttpResponseRedirect("/")

def ajax_wholesale_imei_stock_summary(request):
    if 'user_id' not in request.session:
        return JsonResponse({'data': [], 'error': 'Not logged in'})

    role_id = request.session.get('role_id')
    has_access, error_message = check_user_access(role_id, 'imei_list', "read")
    if not has_access:
        return JsonResponse({
            'message': 'permission',
            'error_message': 'You do not have permission to view the Wholesale IMEI Stock details'
        })

    # Filters from request
    subcategory_id = request.POST.get('subcategory')
    brand_id = request.POST.get('brand_id')
    model_id = request.POST.get('model_id')
    variant_id = request.POST.get('variant_id')
    color_id = request.POST.get('color_id')
    stock_filter = request.POST.get('stock')
    
    query = "SELECT * FROM wholesale_imei_stock WHERE is_available = 1"
    params = []

    if subcategory_id:
        query += " AND subcategory_id = %s"
        params.append(subcategory_id)
    if brand_id:
        query += " AND brand_id = %s"
        params.append(brand_id)
    if model_id:
        query += " AND model_id = %s"
        params.append(model_id)
    if variant_id:
        query += " AND variant_id = %s"
        params.append(variant_id)
    if color_id:
        query += " AND color_id = %s"
        params.append(color_id)
        
    if stock_filter == 'stock':
        query += " AND stock_type IN ('stock', 'non_open_stock')"
    elif stock_filter == 'demo':
        query += " AND stock_type = 'demo'"

    with connection.cursor() as cursor:
        cursor.execute(query, params)
        columns = [col[0] for col in cursor.description]
        rows = [dict(zip(columns, row)) for row in cursor.fetchall()]

    # Also include wholesale opening stock rows.
    opening_query = """
        SELECT
            wos.id,
            'opening' AS wholesale_type,
            wos.branch_id AS wholesale_id,
            b.name AS wholesale_name,
            wos.subcategory_id,
            sc.name AS subcategory_name,
            wos.brand_id,
            br.name AS brand_name,
            wos.model_id,
            mo.name AS model_name,
            wos.variant_id,
            vr.name AS variant_name,
            wos.color_id,
            cl.name AS color_name,
            COALESCE(wos.is_demo, 0) AS is_demo,
            CASE WHEN COALESCE(wos.is_demo, 0) = 1 THEN 'demo' ELSE 'stock' END AS stock_type,
            COALESCE(wos.db_price, 0) AS amount,
            COALESCE(wos.fsp, 0) AS fsp,
            COALESCE(wos.wsp, 0) AS wsp,
            COALESCE(wos.mop, 0) AS mop,
            COALESCE(wos.bop, 0) AS bop,
            COALESCE(wos.mrp, 0) AS mrp,
            wos.imei_no AS imei,
            1 AS is_available
        FROM wholesale_opening_stock wos
        LEFT JOIN branches b ON b.id = wos.branch_id
        LEFT JOIN sub_category sc ON sc.id = wos.subcategory_id
        LEFT JOIN brands br ON br.id = wos.brand_id
        LEFT JOIN model mo ON mo.id = wos.model_id
        LEFT JOIN variants vr ON vr.id = wos.variant_id
        LEFT JOIN colors cl ON cl.id = wos.color_id
        WHERE wos.status = 1 AND wos.is_active = 1
    """
    opening_params = []

    if subcategory_id:
        opening_query += " AND wos.subcategory_id = %s"
        opening_params.append(subcategory_id)
    if brand_id:
        opening_query += " AND wos.brand_id = %s"
        opening_params.append(brand_id)
    if model_id:
        opening_query += " AND wos.model_id = %s"
        opening_params.append(model_id)
    if variant_id:
        opening_query += " AND wos.variant_id = %s"
        opening_params.append(variant_id)
    if color_id:
        opening_query += " AND wos.color_id = %s"
        opening_params.append(color_id)

    if stock_filter == 'stock':
        opening_query += " AND COALESCE(wos.is_demo, 0) = 0"
    elif stock_filter == 'demo':
        opening_query += " AND COALESCE(wos.is_demo, 0) = 1"

    with connection.cursor() as cursor:
        cursor.execute(opening_query, opening_params)
        opening_columns = [col[0] for col in cursor.description]
        opening_rows = [dict(zip(opening_columns, row)) for row in cursor.fetchall()]

    # Merge with de-duplication by IMEI (keep existing view row first if present).
    existing_imeis = {str(r.get('imei') or '').strip() for r in rows}
    for o_row in opening_rows:
        o_imei = str(o_row.get('imei') or '').strip()
        if o_imei and o_imei not in existing_imeis:
            rows.append(o_row)
            existing_imeis.add(o_imei)

    formatted = []
    total_mrp = 0
    total_amount = 0
    total_mop = 0
    total_bop = 0

    for idx, row in enumerate(rows, 1):
        mrp = float(row.get('mrp') or 0)
        fsp = float(row.get('fsp') or 0)
        mop = float(row.get('mop') or 0)
        bop = float(row.get('bop') or 0)
        
        # Internal/opening rows prefer FSP when available.
        if row.get('wholesale_type') in ('internal', 'opening'):
            amount = fsp
            if amount <= 0:
                amount = float(row.get('amount') or 0)
        else:
            amount = float(row.get('amount') or 0)

        total_mrp += mrp
        total_amount += amount
        total_mop += mop
        total_bop += bop

        # ✅ STOCK TYPE LOGIC: Only stock and demo
        stock_type = row.get('stock_type')
        if stock_type == 'non_open_stock':
            display_stock_type = 'stock'
        else:
            display_stock_type = stock_type

        formatted.append({
            'id': idx,
            'wholesale_name': row.get('wholesale_name'),
            'sub_category': row.get('subcategory_name'),
            'brand': row.get('brand_name'),
            'model': row.get('model_name'),
            'variant': row.get('variant_name'),
            'color': row.get('color_name'),
            'imei': row.get('imei'),
            'mrp': format_amount(mrp),
            'amount': format_amount(amount),
            'mop': format_amount(mop),
            'bop': format_amount(bop),
            'stock_type': display_stock_type.capitalize(),
            'wholesale_type': row.get('wholesale_type').capitalize(),
            'source': row.get('wholesale_type').capitalize()
        })

    return JsonResponse({
        'data': formatted,
        'available_qty': len(formatted),
        'total_mrp': total_mrp,
        'total_stock_value': total_amount,
        'total_mop': total_mop,
        'total_bop': total_bop,
        'is_ho': 1 
    })
