from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render
from django.views.generic import ListView
from reunions.models import Reunion, Participant
from enquetes.models import Enquete
from django.db.models import Count
from django.db.models.functions import TruncMonth
from datetime import datetime


class AccueilView(LoginRequiredMixin,ListView):
    template_name = 'index.html'

    def get_queryset(self):
        self.reunion_all = Reunion.objects.all().order_by('-date')[:10]
        self.renioncercle = Reunion.objects.filter(type_reunion='ReunionCercle')
        self.dialoguecom = Reunion.objects.filter(type_reunion='DialogueCommunautaire')
        self.reunioncord = Reunion.objects.filter(type_reunion='ReunionCoordination')
        self.enquete = Enquete.objects.all()
        self.enquete10 = Enquete.objects.all().order_by('-datesysteme')[:10]

        if self.enquete.count() == 0:
            self.pcnenquete = 0
        else:
            self.pcnenquete = round((self.enquete.count() / self.reunion_all.count()) * 100)

        return self.renioncercle

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)

        # Année actuelle
        current_year = datetime.now().year

        # Données regroupées par mois et type de réunion
        monthly_data = (
            Reunion.objects.filter(date__year=current_year)
            .annotate(month=TruncMonth('date'))
            .values('month', 'type_reunion')
            .annotate(total=Count('id'))
            .order_by('month')
        )

        # Initialiser les données pour chaque mois (Janvier à Décembre)
        months = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
        cercle_data = [0] * 12
        com_data = [0] * 12
        coord_data = [0] * 12

        # Mapper les données mensuelles
        for data in monthly_data:
            month_index = data['month'].month - 1  # Janvier = 0
            if data['type_reunion'] == 'ReunionCercle':
                cercle_data[month_index] = data['total']
            elif data['type_reunion'] == 'DialogueCommunautaire':
                com_data[month_index] = data['total']
            elif data['type_reunion'] == 'ReunionCoordination':
                coord_data[month_index] = data['total']

        # Ajouter les données au contexte
        context.update({
            'months': months,
            'cercle_data': cercle_data,
            'com_data': com_data,
            'coord_data': coord_data,
            'renioncercle': self.renioncercle,
            'dialoguecom': self.dialoguecom,
            'reunioncord': self.reunioncord,
            'enquete': self.enquete,
            'enquete10': self.enquete10,
            'enquetecount': self.enquete.count(),
            'renioncerclecount': self.renioncercle.count(),
            'dialoguecomcount': self.dialoguecom.count(),
            'reunioncordcount': self.reunioncord.count(),
            'pcnenqu': self.pcnenquete,
            'reunionall': self.reunion_all,
        })
        return context