{% extends 'base.html.twig' %}

{% set jours_fr = {'Mon': 'Lun', 'Tue': 'Mar', 'Wed': 'Mer', 'Thu': 'Jeu', 'Fri': 'Ven', 'Sat': 'Sam', 'Sun': 'Dim'} %}

{% block title %}Planning Salarié - {{ agent.fullName }}{% endblock %}

{% block body %}
<!-- Page Title -->
<div class="row">
    <div class="col-12">
        <div class="page-title-box d-sm-flex align-items-center justify-content-between">
            <h4 class="mb-sm-0 font-size-18">Planning Salarié</h4>
            <div class="page-title-right">
                <ol class="breadcrumb m-0">
                    {% if is_granted('ROLE_ADMIN') %}
                    <li class="breadcrumb-item"><a href="{{ path('app_dashboard') }}">Accueil</a></li>
                    <li class="breadcrumb-item"><a href="{{ path('app_planning_agent_index') }}">Plannings</a></li>
                    {% endif %}
                    <li class="breadcrumb-item active">{{ agent.fullName }}</li>
                </ol>
            </div>
        </div>
    </div>
</div>

<!-- Planning Document -->
<div class="row">
    <div class="col-12">
        <div class="card">
            <div class="card-body">
                <!-- Header -->
                <div class="row mb-4">
                    <div class="col-md-2 text-center">
                        {% if agency and agency.logo %}
                            <img src="{{ asset('uploads/logos/' ~ agency.logo) }}" alt="{{ agency.name }}" height="80">
                        {% elseif agency %}
                            <div class="border p-3">
                                <strong>{{ agency.name }}</strong>
                            </div>
                        {% endif %}
                    </div>
                    <div class="col-md-6 text-center">
                        <h4 class="mb-2">{{ agency ? agency.name : '' }}</h4>
                        <h2 class="text-primary">Planning salarié</h2>
                    </div>
                    <div class="col-md-4 text-end">
                        <p class="mb-1"><strong>{{ agent.matricule }}</strong> {{ agent.fullName }}</p>
                        <p class="mb-0">{{ agent.qualification|qualification_label }}</p>
                    </div>
                </div>

                <!-- Month and Contract Info -->
                {% set prevMonth = month == 1 ? 12 : month - 1 %}
                {% set prevYear  = month == 1 ? year - 1 : year %}
                {% set nextMonth = month == 12 ? 1 : month + 1 %}
                {% set nextYear  = month == 12 ? year + 1 : year %}
                <div class="row mb-3 align-items-center">
                    <div class="col-md-6 d-flex align-items-center gap-2">
                        <a href="{{ path('app_planning_agent_show', {id: agent.id, year: prevYear, month: prevMonth}) }}"
                           class="btn btn-sm btn-outline-secondary"
                           title="Mois précédent">
                            <i class="bi bi-chevron-left"></i> Mois préc.
                        </a>
                        <h5 class="mb-0 mx-2">{{ monthName|upper }} {{ year }}</h5>
                        <a href="{{ path('app_planning_agent_show', {id: agent.id, year: nextYear, month: nextMonth}) }}"
                           class="btn btn-sm btn-outline-secondary"
                           title="Mois suivant">
                            Mois suiv. <i class="bi bi-chevron-right"></i>
                        </a>
                    </div>
                    <div class="col-md-6 text-end">
                        {% if agent.contractHours %}<span>Contrat : <strong>{{ agent.contractHours }} h</strong></span>{% endif %}
                    </div>
                </div>

                {# Warning dépassement 48h/semaine #}
                {% if overweeks|length > 0 %}
                    <div class="alert alert-danger d-flex align-items-start mb-3" role="alert">
                        <i class="bi bi-exclamation-triangle-fill me-2 fs-4"></i>
                        <div>
                            <strong>Dépassement temps de travail légal ({{ weeklyLimit }}h/semaine)</strong>
                            <ul class="mb-0 mt-1">
                                {% for key, h in overweeks %}
                                    {% set parts = key|split('-') %}
                                    <li>Semaine {{ parts[1] }} ({{ parts[0] }}) : <strong>{{ h|number_format(2, ',', ' ') }} h</strong></li>
                                {% endfor %}
                            </ul>
                        </div>
                    </div>
                {% endif %}

                <!-- Planning Table -->
                <div class="table-responsive">
                    <table class="table table-bordered table-sm planning-table">
                        <thead class="table-light">
                            <tr>
                                <th style="width: 60px;">Jour</th>
                                <th style="width: 150px;">Plages horaires</th>
                                <th style="width: 50px;">H</th>
                                <th>Sites</th>
                                <th>Qualification</th>
                                <th style="width: 50px;">Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% set weekTotal = 0 %}
                            {% set monthTotal = 0 %}
                            {% set currentWeek = null %}

                            {% for day in daysInMonth %}
                                {% set entry = entries[day.format('Y-m-d')]|default(null) %}
                                {% set dayOfWeek = day.format('N') %}
                                {% set weekKey = day.format('o-W') %}
                                {% set isNewWeek = currentWeek != weekKey %}

                                {# Afficher le total de la semaine précédente #}
                                {% if isNewWeek and currentWeek is not null %}
                                    {% set fullWeekHours = weeklyHours[currentWeek]|default(weekTotal) %}
                                    {% set isOver = fullWeekHours > weeklyLimit %}
                                    <tr class="{{ isOver ? 'table-danger' : 'table-info' }}">
                                        <td colspan="2" class="text-end fst-italic">
                                            Total heures travaillées semaine
                                            {% if isOver %}
                                                <i class="bi bi-exclamation-triangle-fill text-danger ms-1" title="Dépassement {{ weeklyLimit }}h/semaine ({{ fullWeekHours|number_format(2, ',', ' ') }}h sur semaine complète)"></i>
                                            {% endif %}
                                        </td>
                                        <td class="fw-bold">{{ weekTotal|number_format(2, ',', ' ') }}{% if isOver and fullWeekHours != weekTotal %} <small class="text-muted">(sem. {{ fullWeekHours|number_format(2, ',', ' ') }}h)</small>{% endif %}</td>
                                        <td colspan="3"></td>
                                    </tr>
                                    {% set weekTotal = 0 %}
                                {% endif %}
                                {% set currentWeek = weekKey %}
                                
                                <tr class="{{ dayOfWeek == '7' ? 'day-sunday' : '' }}{{ (entry and entry.isHoliday) or day.format('Y-m-d') in publicHolidays|keys ? ' day-holiday' : '' }}">
                                    <td>
                                        <strong>{{ jours_fr[day.format('D')] }} {{ day.format('d') }}</strong>
                                    </td>
                                    
                                    {% if entry %}
                                        {% if entry.entryType == 'vacation' %}
                                            <td class="status-vacation">{{ entry.timeRange }}</td>
                                            <td class="fw-bold">{{ entry.calculatedHours|number_format(2, ',', ' ') }}</td>
                                            <td>{{ entry.site ? entry.site.name : '' }}</td>
                                            {% set qualVal = entry.qualification ?: entry.agent.qualification %}
                            <td>{{ is_granted('ROLE_ADMIN') ? qualVal|qualification_label : qualVal|qualification_short_label }}</td>
                                            <td><a href="{{ path('app_planning_entry_edit', {id: entry.id}) }}" class="btn btn-sm btn-outline-primary" title="{{ is_granted('ROLE_ADMIN') ? 'Modifier' : 'Détails / Indisponibilité' }}"><i class="bi bi-{{ is_granted('ROLE_ADMIN') ? 'pencil' : 'eye' }}"></i></a></td>
                                            {% set weekTotal = weekTotal + entry.calculatedHours %}
                                            {% set monthTotal = monthTotal + entry.calculatedHours %}
                                        {% elseif entry.entryType == 'paid_leave' %}
                                            <td class="status-leave">Pas de Vacation</td>
                                            <td>{{ entry.calculatedHours|number_format(2, ',', ' ') }}</td>
                                            <td class="status-leave">Congé payé</td>
                                            <td></td>
                                            <td><a href="{{ path('app_planning_entry_edit', {id: entry.id}) }}" class="btn btn-sm btn-outline-primary" title="{{ is_granted('ROLE_ADMIN') ? 'Modifier' : 'Détails / Indisponibilité' }}"><i class="bi bi-{{ is_granted('ROLE_ADMIN') ? 'pencil' : 'eye' }}"></i></a></td>
                                        {% elseif entry.entryType == 'authorized_absence' %}
                                            <td class="status-absence">Pas de Vacation</td>
                                            <td></td>
                                            <td class="status-absence">Absence autorisée</td>
                                            <td></td>
                                            <td><a href="{{ path('app_planning_entry_edit', {id: entry.id}) }}" class="btn btn-sm btn-outline-primary" title="{{ is_granted('ROLE_ADMIN') ? 'Modifier' : 'Détails / Indisponibilité' }}"><i class="bi bi-{{ is_granted('ROLE_ADMIN') ? 'pencil' : 'eye' }}"></i></a></td>
                                        {% else %}
                                            <td>Pas de Vacation</td>
                                            <td></td>
                                            <td>{{ entry.notes }}</td>
                                            <td></td>
                                            <td><a href="{{ path('app_planning_entry_edit', {id: entry.id}) }}" class="btn btn-sm btn-outline-primary" title="{{ is_granted('ROLE_ADMIN') ? 'Modifier' : 'Détails / Indisponibilité' }}"><i class="bi bi-{{ is_granted('ROLE_ADMIN') ? 'pencil' : 'eye' }}"></i></a></td>
                                        {% endif %}
                                    {% else %}
                                        <td>Pas de Vacation</td>
                                        <td></td>
                                        <td colspan="2"></td>
                                        <td></td>
                                    {% endif %}
                                </tr>
                            {% endfor %}
                            
                            {# Dernière semaine #}
                            {% set fullWeekHours = weeklyHours[currentWeek]|default(weekTotal) %}
                            {% set isOver = fullWeekHours > weeklyLimit %}
                            <tr class="{{ isOver ? 'table-danger' : 'table-info' }}">
                                <td colspan="2" class="text-end fst-italic">
                                    Total heures travaillées semaine
                                    {% if isOver %}
                                        <i class="bi bi-exclamation-triangle-fill text-danger ms-1" title="Dépassement {{ weeklyLimit }}h/semaine ({{ fullWeekHours|number_format(2, ',', ' ') }}h sur semaine complète)"></i>
                                    {% endif %}
                                </td>
                                <td class="fw-bold">{{ weekTotal|number_format(2, ',', ' ') }}{% if isOver and fullWeekHours != weekTotal %} <small class="text-muted">(sem. {{ fullWeekHours|number_format(2, ',', ' ') }}h)</small>{% endif %}</td>
                                <td colspan="3"></td>
                            </tr>
                            
                            {# Total du mois #}
                            <tr class="table-primary">
                                <td colspan="2" class="text-end fw-bold">Total des heures travaillées</td>
                                <td class="fw-bold">{{ monthTotal|number_format(2, ',', ' ') }}</td>
                                <td colspan="3"></td>
                            </tr>
                        </tbody>
                    </table>
                </div>

                <!-- Hours Summary -->
                <div class="row">
                    <div class="col-12">
                        <table class="table table-bordered table-sm" style="font-size: 0.85rem;">
                            <thead class="table-light">
                                <tr>
                                    <th colspan="4" class="text-center">Heures planifiées</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td>
                                        <strong>Normales</strong> -
                                        Jour: <span class="fw-bold">{{ stats.normales_jour|number_format(2, ',', ' ') }}</span>
                                        Nuit: <span class="fw-bold">{{ stats.normales_nuit|number_format(2, ',', ' ') }}</span>
                                    </td>
                                    <td>
                                        <strong>Fériées</strong> -
                                        Jour: <span class="fw-bold">{{ stats.feriees_jour|number_format(2, ',', ' ') }}</span>
                                        Nuit: <span class="fw-bold">{{ stats.feriees_nuit|number_format(2, ',', ' ') }}</span>
                                    </td>
                                    <td>
                                        <strong>Dimanche</strong> -
                                        Jour: <span class="fw-bold">{{ stats.dimanche_jour|number_format(2, ',', ' ') }}</span>
                                        Nuit: <span class="fw-bold">{{ stats.dimanche_nuit|number_format(2, ',', ' ') }}</span>
                                    </td>
                                    <td>
                                        <strong>Dimanche férié</strong> -
                                        Jour: <span class="fw-bold">{{ stats.dimanche_ferie_jour|number_format(2, ',', ' ') }}</span>
                                        Nuit: <span class="fw-bold">{{ stats.dimanche_ferie_nuit|number_format(2, ',', ' ') }}</span>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>

                <!-- Agent / Site info -->
                <div class="row mt-3">
                    <div class="col-12">
                        <table class="table table-bordered table-sm">
                            <thead class="table-dark">
                                <tr>
                                    <th>Nom du site</th>
                                    <th>Adresse du site</th>
                                    <th style="width: 150px;">Téléphone du site</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td>{{ mainSite ? mainSite.name : '' }}</td>
                                    <td>{% if mainSite %}{{ mainSite.address }}{% if mainSite.postalCode or mainSite.city %}, {{ mainSite.postalCode }} {{ mainSite.city }}{% endif %}{% endif %}</td>
                                    <td>{{ mainSite ? mainSite.phone : '' }}</td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>

                <div class="row mt-4">
                    <div class="col-12">
                        <p class="fst-italic">Ce planning est susceptible d'être modifié au cours du mois.</p>
                    </div>
                </div>

                <!-- Actions -->
                <div class="row mt-4">
                    <div class="col-12 text-end">
                        <a href="{{ path('app_planning_agent_pdf', {id: agent.id, year: year, month: month}) }}" class="btn btn-primary">
                            <i class="bi bi-file-pdf me-1"></i> Télécharger PDF
                        </a>
                        {% if is_granted('ROLE_ADMIN') %}
                        <button type="button" class="btn btn-success" id="btnOpenEmailAgentModal"
                                data-url="{{ path('app_email_send_agent', {id: agent.id, year: year, month: month}) }}">
                            <i class="bi bi-envelope me-1"></i> Envoyer par email
                        </button>
                        {% endif %}
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

{% if is_granted('ROLE_ADMIN') %}
<!-- Modal envoi email agent -->
<div class="modal fade" id="emailAgentModal" tabindex="-1" aria-labelledby="emailAgentModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="emailAgentModalLabel">
                    <i class="bi bi-envelope me-1"></i> Envoyer le planning par email
                </h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <div id="emailAgentLoading" class="text-center py-3">
                    <div class="spinner-border text-success" role="status">
                        <span class="visually-hidden">Chargement…</span>
                    </div>
                    <p class="mt-2 text-muted">Chargement…</p>
                </div>
                <div id="emailAgentInfo" class="d-none">
                    <p class="mb-0">
                        Envoyer le planning à
                        <strong id="emailAgentName"></strong>
                        (<span id="emailAgentEmail" class="text-muted"></span>) ?
                    </p>
                </div>
                <form id="emailAgentForm" method="post" action="" class="d-none">
                    <input type="hidden" name="_token" value="{{ csrf_token('email_send') }}">
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
                <button type="button" class="btn btn-success d-none" id="emailAgentSubmitBtn">
                    <i class="bi bi-send me-1"></i> Confirmer
                </button>
            </div>
        </div>
    </div>
</div>
{% endif %}
{% endblock %}

{% block javascripts %}
{{ parent() }}
{% if is_granted('ROLE_ADMIN') %}
<script>
(function () {
    const btnOpen   = document.getElementById('btnOpenEmailAgentModal');
    if (!btnOpen) return;

    const modal     = new bootstrap.Modal(document.getElementById('emailAgentModal'));
    const loading   = document.getElementById('emailAgentLoading');
    const info      = document.getElementById('emailAgentInfo');
    const form      = document.getElementById('emailAgentForm');
    const submitBtn = document.getElementById('emailAgentSubmitBtn');

    btnOpen.addEventListener('click', async () => {
        loading.classList.remove('d-none');
        info.classList.add('d-none');
        form.classList.add('d-none');
        submitBtn.classList.add('d-none');
        modal.show();

        try {
            const resp = await fetch(btnOpen.dataset.url);
            if (!resp.ok) throw new Error('Erreur réseau');
            const data = await resp.json();

            loading.classList.add('d-none');
            document.getElementById('emailAgentName').textContent  = data.name;
            document.getElementById('emailAgentEmail').textContent = data.email;
            form.action = btnOpen.dataset.url;
            info.classList.remove('d-none');
            submitBtn.classList.remove('d-none');
        } catch (e) {
            loading.classList.add('d-none');
            loading.innerHTML = '<p class="text-danger">Impossible de charger les informations.</p>';
            loading.classList.remove('d-none');
        }
    });

    submitBtn.addEventListener('click', () => {
        form.submit();
    });
})();
</script>
{% endif %}
{% endblock %}
