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
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.pdfmetrics import registerFont
import qrcode
import io
import base64

# Absolute path to the font file
font_path = os.path.join(settings.BASE_DIR, 'static', 'dist', 'font', 'Oswald-VariableFont_wght.ttf')

# Register font
registerFont(TTFont('Oswald', font_path))

User = get_user_model()

def get_subordinates(request):
    parent_id = request.GET.get('parent_id')
    level = request.GET.get('level')

    if level == 'battalion':
        subordinates = Battalion.objects.filter(dq_id=parent_id).values('id', 'name')
    elif level == 'company':
        subordinates = Company.objects.filter(battalion_id=parent_id).values('id', 'name')
    elif level == 'rank':
        subordinates = Rank.objects.filter(member_status_id=parent_id).values('id','name')
    elif level == 'upazila':
        subordinates = Upazila.objects.filter(district_id=parent_id).values('id', 'name')
    elif level == 'reason_des':
        subordinates = LeaveReasonDes.objects.filter(leave_reason_id=parent_id).values('id', 'text')
    else:
        subordinates = []
    return JsonResponse(list(subordinates), safe=False)




def home(request):
    if request.user.is_authenticated:
        role = request.user.role
        if role and role.modules.filter(name='dashboard_admin').exists():
            return redirect("dashboard_admin")
        elif role and role.modules.filter(name='dashboard_battalion').exists():
            return redirect("dashboard_battalion")
        elif role and role.modules.filter(name='dashboard_company').exists():
            return redirect("dashboard_company")
        elif role and role.modules.filter(name='dashboard_member').exists():
            return redirect("dashboard_member")
        else:
            return render(request, 'others/no_permission.html')
    else:
        return redirect("login")

def viewLogin(request):
    return render(request,'login.html')

def doLogin(request):
    if request.method != "POST":
        messages.error(request, "Method Not Allowed")
        return redirect("login")
    else:
        try:
            email = request.POST.get("email")
            password = request.POST.get("password")
            remember_me = request.POST.get("remember_me")  # Get checkbox value
            is_email_valid = User.objects.filter(email=email).exists()
            if not is_email_valid:
                messages.error(request, "Invalid Login Email")
                return redirect("login")
            user = authenticate(email=email, password=password)
            if user is not None:
                login(request, user)
                    # Set session expiry based on "Remember Me"
                if not remember_me:  # If checkbox is NOT checked
                    request.session.set_expiry(0)  # Session expires when browser closes
                else:
                    request.session.set_expiry(1209600)  # 2 weeks (in seconds)
                return redirect("home")
            else:
                messages.error(request, "Invalid Login Password")
                return redirect("login")
        except:
            messages.error(request, "Invalid Login Details")
            return redirect("login")
        
def doLogout(request):
    logout(request)  # Correct way to log out the user
    return redirect("login")  # Redirect to the login page

@login_required(login_url='login')
def change_password(request):
    if request.method == "POST":
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        confirm_password = request.POST.get('confirm_password')
        user = request.user
        if new_password == confirm_password:
            if user.check_password(old_password):
                user.set_password(new_password)
                user.save()
                messages.success(request, "Password changed successfully")
                return redirect('change_password')
            else:
                messages.error(request, "Old password is incorrect")
                return redirect('change_password')
        else:
            messages.error(request, "New password and confirm password does not match")
            return redirect('change_password')
    return render(request,'admin/changePassword.html')
    
def info(request):
    return render(request, 'admin/info.html')

def user_manual(request):
    return render(request, 'admin/user_manual.html')
    
    
