
from django.shortcuts import redirect, render
from django.contrib import messages
from datetime import datetime, timedelta
from django.db.models import Sum, Count, Q, F
from django.urls import reverse
from account.models import *
from django.core.paginator import Paginator
from .utils.decorators import role_required
#for pdf
from django.template.loader import get_template
from django.http import HttpResponse
from xhtml2pdf import pisa



from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required
User = get_user_model()
from .variable import *
from .custom_today import get_custom_today


today = get_custom_today()

def create_notice(request):
    # Get the user's role
    role = request.user.role
    if role and role.modules.filter(name='create_notice_admin').exists():
        members = Member.objects.filter(active=True).order_by('id')
        companies = Company.objects.all()
    elif role and role.modules.filter(name='create_notice_battalion').exists():
        companies = request.user.battalion.companies.all()
        members = Member.objects.filter(active=True, company__in=companies).order_by('id')
    elif role and role.modules.filter(name='create_notice_company').exists():
        company = request.user.company
        members = Member.objects.filter(active=True, company=company).order_by('id')
        companies = Company.objects.filter(id=company.id).first()
    else:
        return render(request, 'others/no_permission.html')
    


    if request.method == "POST":
        date = today
        notice_for = "All"
        notice_from = "93 Armd Bde"
        army_no = request.POST.get("army_no")
        remarks = request.POST.get("remarks")

        # Check if the user has permission
        if role and role.modules.filter(name='create_notice_admin').exists():
            pass
        elif role and role.modules.filter(name='create_notice_battalion').exists():
            notice_from = request.user.battalion.name
            battalion_id = request.user.battalion.id
        elif role and role.modules.filter(name='create_notice_company').exists():
            notice_from = request.user.company.name
            company_id = request.user.company.id
        else:
            return render(request, 'others/no_permission.html')
        
        
        battalion_id = request.POST.get("battalion",'')
        company_id = request.POST.get("company",'')
        members = Member.objects.filter(active=True)
        if battalion_id:
            members = members.filter(company__battalion_id=battalion_id)
            notice_for = Battalion.objects.get(id=battalion_id).name
        if company_id:
            members = members.filter(company_id=company_id)
            notice_for = Company.objects.get(id=company_id).name

        if army_no:
            members = members.filter(army_no=army_no).first()
            if not members:
                messages.error(request, "Invalid Army Number.")
                return redirect("create_notice")
            notice_for = members.army_no
        # Create notice
        for i in members:
            Notice.objects.create(date=date,notice_from=notice_from,notice_for=notice_for,member=i,remarks=remarks)

        NoticeHistory.objects.create(date=date,notice_from=notice_from,notice_for=notice_for,remarks=remarks)
        messages.success(request, "Notice created successfully.")
        return redirect("read_notice")

    context = {
        "members": members,
        "battalions": Battalion.objects.all(),
        "companies": companies
    }
    return render(request, "notice/create_notice.html", context)


@login_required
def read_notice(request):
    notices = NoticeHistory.objects.all()

    # Pagination
    paginator = Paginator(notices, 30)  # Show 30 notices per page
    page_number = request.GET.get("page")
    notices = paginator.get_page(page_number)

    context = {
        "notices": notices
    }
    return render(request, "notice/read_notice.html", context)