from django.shortcuts import redirect, render
from datetime import datetime
from django.db.models import Sum, Count, Q, F
from django.contrib import messages
from itertools import groupby
from django.core.paginator import Paginator
from account.models import *
from .custom_today import get_custom_today
from django.contrib.auth import get_user_model
from dateutil.relativedelta import relativedelta
from .utils.decorators import role_required

User = get_user_model()


def dashboard_csm_company(request):
    company = request.user.company
    # Count unread (pending) and read (approved/rejected) leaves
    total_count = ApplyLeave.objects.filter(member__company=company).count() 
    unread_count = ApplyLeave.objects.filter(member__company=company, csm_status='pending').count()
    read_count = ApplyLeave.objects.filter(member__company=company).exclude(csm_status='pending').count()
    context = {
        'total':total_count,
        'unread':unread_count,
        'read':read_count
    }
    return render(request, 'dashboard/_csm.html',context)


@role_required('csm_company')
def leave_check_csm_company(request):
    company = request.user.company
     # Count unread (pending) and read (approved/rejected) leaves
    unread_count = ApplyLeave.objects.filter(member__company=company, csm_status='pending').count()
    read_count = ApplyLeave.objects.filter(member__company=company).exclude(csm_status='pending').count()
    
    
    applyLeaves = ApplyLeave.objects.filter(member__company=company,csm_status='pending').order_by('-created_at')
    leavesHistory = ApplyLeave.objects.filter(member__company=company).exclude(csm_status='pending').order_by('-updated_at')
    #pagination for LeaveHistory
    paginator = Paginator(leavesHistory, 30)
    page_number = request.GET.get('page')
    leavesHistory = paginator.get_page(page_number)
    context = {
        'applyLeaves':applyLeaves,
        'leavesHistory':leavesHistory,
        'unread':unread_count,
        'read':read_count
    }
    return render(request, 'company/check_leave_csm.html', context)

@role_required('csm_company')
def leave_approve_csm_company(request,id):
    apply_leave = ApplyLeave.objects.get(id=id)
    apply_leave.csm_status = 'approved'
    apply_leave.save()
    return redirect('leave_check_csm_company')

@role_required('csm_company')
def leave_reject_csm_company(request,id):
    apply_leave = ApplyLeave.objects.get(id=id)
    apply_leave.csm_status = 'rejected'
    apply_leave.save()
    return redirect('leave_check_csm_company')

