from django.http import JsonResponse
from django.shortcuts import render,redirect
from django.contrib.auth import authenticate, login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
from django.contrib import messages
from .models import *
import os
from django.conf import settings
# Create your views here.

#for pdf
from django.template.loader import get_template
from django.http import HttpResponse
from xhtml2pdf import pisa
import qrcode
import io
import base64

User = get_user_model()



def move_order_pdf (request, id):
    movement_order = MovementOrder.objects.get(id=id)
    context = {
        'movement_order': movement_order,
    }

    # Load the HTML template and render it with context data
    template = get_template('pdf/movement_order_pdf.html')
    html = template.render(context)

    # Create a response with PDF content type
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = f'inline; filename="movement_order_{id}.pdf"'

    # Convert HTML to PDF
    pisa_status = pisa.CreatePDF(html, dest=response)

    if pisa_status.err:
        return HttpResponse("Error generating PDF", status=500)
    
    return response






#TODO: Leave Certificate PDF
def leave_certificate(request,id):
    
    current_url = request.build_absolute_uri()
    # Create QR code image
    qr = qrcode.make(current_url)
    buffered = io.BytesIO()
    qr.save(buffered, format="PNG")
    qr_base64 = base64.b64encode(buffered.getvalue()).decode()
    leave = Leave.objects.get(id=id)
    
    # get start_date year
    start_year = leave.start_date.year
    # now count all p/lve c/lve and w/lve in that year
    p_lve_count = Leave.objects.filter(member=leave.member, leave_type__name='p_leave', start_date__year=start_year).count()
    c_lve_count = Leave.objects.filter(member=leave.member, leave_type__name='c_leave', start_date__year=start_year).count()
    w_lve_count = Leave.objects.filter(member=leave.member, leave_type__name='w_leave', start_date__year=start_year).count()
    total_leave_count = p_lve_count + c_lve_count + w_lve_count

    
    def get_logo_base64():
        logo_path = os.path.join(settings.STATICFILES_DIRS[0], 'dist', 'assets', 'img', 'logo.jpeg')
        with open(logo_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode('utf-8')
    context = {
        "leave":leave,
        "today":date.today(),
        "qr_code":qr_base64,
        "url":current_url,
        "p_lve_count":p_lve_count,
        "c_lve_count":c_lve_count,
        "w_lve_count":w_lve_count,
        "total_leave_count":total_leave_count,
        'logo_base64': get_logo_base64(),
    }
    # Load the HTML template and render it with context data
    template = get_template('pdf/leave_certificate.html')
    html = template.render(context)

    # Create a response with PDF content type
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = f'inline; filename="leave_certificate.pdf"'

    # Convert HTML to PDF
    pisa_status = pisa.CreatePDF(html, dest=response)

    if pisa_status.err:
        return HttpResponse("Error generating PDF", status=500)
    
    return response


def leave_certificate_bangla(request,id):
    
    current_url = request.build_absolute_uri()
    # Create QR code image
    qr = qrcode.make(current_url)
    buffered = io.BytesIO()
    qr.save(buffered, format="PNG")
    qr_base64 = base64.b64encode(buffered.getvalue()).decode()
    
    leave = Leave.objects.get(id=id)
    context = {
        "leave":leave,
        "today":date.today(),
        "qr_code":qr_base64,
        "url":current_url
    }
    return render(request,'l_c.html',context)