from pickle import TRUE
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.db.models import Q
from weasyprint import HTML
from openpyxl import load_workbook, Workbook
from django.utils import timezone
from django.db import IntegrityError

from .models import Vendor, Vendordtl, Bank, Matauang


def vendordtl(request):
    query = request.GET.get('search')
    if query:
        vendordtl_list = Vendordtl.objects.filter(
            Q(vendordtl__vendorcode__icontains=query) |
            Q(vendordtl__vendorname__icontains=query) |
            Q(rema__icontains=query) |
            Q(currsigndtl__currsign__icontains=query) |
            Q(currsigndtl__currname__icontains=query) |
            Q(bankcodedtl__bankcode__icontains=query) |
            Q(bankcodedtl__bankname__icontains=query) |
            Q(branch__icontains=query) |
            Q(bankaddress__icontains=query) |
            Q(accountno__icontains=query) |
            Q(swiftcode__icontains=query)
        ).select_related('vendordtl', 'currsigndtl', 'bankcodedtl').order_by('vendordtl__vendorcode')
    else:
        vendordtl_list = Vendordtl.objects.select_related('vendordtl', 'currsigndtl', 'bankcodedtl').all().order_by('vendordtl')

    vendors = Vendor.objects.all().order_by('vendorcode')
    banks = Bank.objects.all().order_by('bankcode')
    matauangs = Matauang.objects.all()

    return render(request, 'finance/vendordtl.html', {
        'vendordtl': vendordtl_list,
        'vendor': vendors,
        'banks': banks,
        'matauangs': matauangs
    })


def add_vendordtl(request):
    return redirect('vendordtl')


def edit_vendordtl(request, vendordtl_id):
    if request.method == 'POST':
        try:
            vendordtl = get_object_or_404(Vendordtl, id=vendordtl_id)
            vendordtl.vendordtl_id = request.POST['vendorcode']
            vendordtl.rema = request.POST['rema']
            vendordtl.currsigndtl_id = request.POST['currsign']
            vendordtl.bankcodedtl_id = request.POST['bankcode']
            vendordtl.branch = request.POST['branch']
            vendordtl.bankaddress = request.POST['bankaddress']
            vendordtl.accountno = request.POST['accountno']
            vendordtl.swiftcode = request.POST['swiftcode']
            vendordtl.save()
            messages.success(request, 'Bank Account No updated successfully!')
        except Exception as e:
            messages.error(request, f'Error updating Bank Account No: {str(e)}')
        return redirect('vendor_detail_by_code', vendorcode=vendordtl.vendordtl_id)
    return redirect('vendor_detail_by_code', vendorcode=vendordtl.vendordtl_id)



def delete_vendordtl(request, id):
    if request.method == 'POST':
        try:
            vendordtl = get_object_or_404(Vendordtl, id=id)
            vendorcode = vendordtl.vendordtl_id  # Simpan sebelum delete
            vendordtl.delete()
            messages.success(request, 'Bank Account No deleted successfully!')
        except Exception as e:
            messages.error(request, f'Error deleting Bank Account No: {str(e)}')
        return redirect('vendor_detail_by_code', vendorcode=vendorcode)
    
    return HttpResponse("Invalid request", status=400)


def save_vendordtl(request, id=None):
    if request.method == "POST":
        vendorcode = request.POST.get('vendorcode', '').strip()
        rema = request.POST.get('rema', '').strip()
        currsign = request.POST.get('currsign', '').strip()
        bankcode = request.POST.get('bankcode', '').strip()
        branch = request.POST.get('branch', '').strip()
        bankaddress = request.POST.get('bankaddress', '').strip()
        accountno = request.POST.get('accountno', '').strip()
        swiftcode = request.POST.get('swiftcode', '').strip()

        if id:
            vendordtl = get_object_or_404(Vendordtl, id=id)
            vendordtl.vendordtl_id = vendorcode
            vendordtl.rema = rema
            vendordtl.currsigndtl_id = currsign
            vendordtl.bankcodedtl_id = bankcode
            vendordtl.branch = branch
            vendordtl.bankaddress = bankaddress
            vendordtl.accountno = accountno
            vendordtl.swiftcode = swiftcode
            vendordtl.save()
            messages.success(request, 'Bank Account No updated successfully!')
        else:
            Vendordtl.objects.create(
                vendordtl_id=vendorcode,
                rema=rema,
                currsigndtl_id=currsign,
                bankcodedtl_id=bankcode,
                branch=branch,
                bankaddress=bankaddress,
                accountno=accountno,
                swiftcode=swiftcode
            )
            messages.success(request, 'Bank Account No added successfully!')

        return redirect('vendor_detail_by_code', vendorcode=vendorcode)

    return HttpResponse("Invalid request", status=400)
