<?php
include_once 'includes/header.php';
include_once 'config/database.php';

// Zona horaria
date_default_timezone_set('America/Lima');

$database = new Database();
$conn = $database->getConnection();

// Empleado logueado
$codempleado = $_SESSION['user']['codempleado'] ?? null;
if (!$codempleado) {
    $_SESSION['error'] = "No se encontró el usuario en sesión.";
    header("Location: index.php");
    exit();
}

// Filtros: mes/año (por defecto actuales)
$mes = isset($_GET['mes']) ? (int)$_GET['mes'] : date('n');
$anio = isset($_GET['anio']) ? (int)$_GET['anio'] : date('Y');
if ($mes < 1 || $mes > 12) $mes = date('n');
if ($anio < 2000 || $anio > 2100) $anio = date('Y');

// Obtener datos del empleado
$empleado = null;
try {
    $stmt = $conn->prepare("SELECT codempleado, nombres, apellidoPaterno, apellidoMaterno, foto 
                            FROM templeado 
                            WHERE codempleado = ?");
    $stmt->execute([$codempleado]);
    $empleado = $stmt->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    $_SESSION['error'] = "Error al obtener datos del empleado: " . $e->getMessage();
}

// Obtener asistencias del mes seleccionado (reutilizando lógica de reportes_asistencias.php)
$asistencias = [];
$datosGrafico = [];
$resumen = [
    'puntual' => 0,
    'tardanza' => 0,
    'falta' => 0,
    'minutos_tardanza' => 0,
    'horas_tardanza' => 0,
    'faltas' => 0
];

try {
    $fechaInicio = sprintf('%04d-%02d-01', $anio, $mes);
    $fechaFin = date('Y-m-t', strtotime($fechaInicio));

    $query = "SELECT 
                t.codprgturnos,
                DATE(t.fecha) as fecha,
                t.reg_entrada,
                t.reg_salida,
                h.hora_entrada,
                h.hora_salida,
                h.minutos_tolerancia,
                h.denominacion as horario_denominacion,
                h.sigla as horario_sigla
              FROM tprogturnos t
              INNER JOIN thorario_per h ON t.codhorario_per = h.codhorario_per
              WHERE t.codempleado = ?
                AND DATE(t.fecha) >= ?
                AND DATE(t.fecha) <= ?
              ORDER BY t.fecha ASC";

    $stmt = $conn->prepare($query);
    $stmt->execute([$codempleado, $fechaInicio, $fechaFin]);
    $asistencias = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($asistencias as &$asistencia) {
        // Calcular tardanza en entrada (con tolerancia)
        if (!empty($asistencia['reg_entrada']) && !empty($asistencia['hora_entrada'])) {
            $fechaEntrada = new DateTime($asistencia['reg_entrada']);
            $fechaBase = new DateTime($asistencia['fecha']);
            $horaEntradaEsperada = new DateTime($fechaBase->format('Y-m-d') . ' ' . $asistencia['hora_entrada']);

            $minutosTolerancia = 0;
            if (!empty($asistencia['minutos_tolerancia'])) {
                $timeParts = explode(':', $asistencia['minutos_tolerancia']);
                if (count($timeParts) >= 2) {
                    $minutosTolerancia = (int)$timeParts[1];
                }
            }
            if ($minutosTolerancia > 0) {
                $horaEntradaEsperada->modify('+' . $minutosTolerancia . ' minutes');
            }

            if ($fechaEntrada > $horaEntradaEsperada) {
                $diff = $fechaEntrada->diff($horaEntradaEsperada);
                $minTardanza = ($diff->days * 24 * 60) + ($diff->h * 60) + $diff->i;
                $asistencia['tardanza_minutos'] = $minTardanza;
                $asistencia['tipo_entrada'] = 'tardanza';
                $resumen['tardanza']++;
                $resumen['minutos_tardanza'] += $minTardanza;
            } else {
                $asistencia['tardanza_minutos'] = 0;
                $asistencia['tipo_entrada'] = 'puntual';
                $resumen['puntual']++;
            }
        } else {
            $asistencia['tardanza_minutos'] = null;
            $asistencia['tipo_entrada'] = empty($asistencia['reg_entrada']) ? 'falta' : 'sin_horario';
            if ($asistencia['tipo_entrada'] === 'falta') {
                $resumen['falta']++;
                $resumen['faltas']++;
            }
        }

        // Datos para gráfico (hora programada vs real de entrada)
        $horaProgMin = null;
        if ($asistencia['hora_entrada']) {
            $h = new DateTime($asistencia['hora_entrada']);
            $horaProgMin = (int)$h->format('H') * 60 + (int)$h->format('i');
        }
        $horaRealMin = null;
        if ($asistencia['reg_entrada']) {
            $h = new DateTime($asistencia['reg_entrada']);
            $horaRealMin = (int)$h->format('H') * 60 + (int)$h->format('i');
        }

        $datosGrafico[] = [
            'fecha' => $asistencia['fecha'],
            'fecha_formato' => date('d/m', strtotime($asistencia['fecha'])),
            'hora_prog_min' => $horaProgMin,
            'hora_real_min' => $horaRealMin
        ];
    }
    unset($asistencia);

    // Calcular horas de tardanza
    $resumen['horas_tardanza'] = round($resumen['minutos_tardanza'] / 60, 2);
} catch (PDOException $e) {
    $_SESSION['error'] = "Error al obtener asistencias: " . $e->getMessage();
}

// Nombres meses
$meses = [
    1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
    5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
    9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
];
?>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2><i class="fas fa-user-check"></i> Mi asistencia</h2>
    </div>

    <?php if (isset($_SESSION['success'])): ?>
        <div class="alert alert-success alert-custom">
            <i class="fas fa-check-circle"></i>
            <?php echo $_SESSION['success']; unset($_SESSION['success']); ?>
        </div>
    <?php endif; ?>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="alert alert-danger alert-custom">
            <i class="fas fa-exclamation-triangle"></i>
            <?php echo $_SESSION['error']; unset($_SESSION['error']); ?>
        </div>
    <?php endif; ?>

    <?php if ($empleado): ?>
        <div class="card mb-4">
            <div class="card-body d-flex align-items-center">
                <div class="me-3">
                    <?php if (!empty($empleado['foto'])): ?>
                        <img src="<?php echo htmlspecialchars($empleado['foto']); ?>" alt="Foto" style="width: 70px; height: 70px; border-radius: 50%; object-fit: cover;">
                    <?php else: ?>
                        <div style="width: 70px; height: 70px; border-radius: 50%; background:#f8f9fa; display:flex;align-items:center;justify-content:center;">
                            <i class="fas fa-user fa-2x text-muted"></i>
                        </div>
                    <?php endif; ?>
                </div>
                <div>
                    <h5 class="mb-1">
                        <?php echo htmlspecialchars($empleado['nombres'] . ' ' . $empleado['apellidoPaterno'] . ' ' . $empleado['apellidoMaterno']); ?>
                    </h5>
                    <small class="text-muted">
                        Período: <?php echo $meses[$mes] . ' ' . $anio; ?>
                    </small>
                </div>
            </div>
        </div>
    <?php endif; ?>

    <!-- Filtros de período -->
    <div class="card mb-4">
        <div class="card-body">
            <form method="GET" action="ver_asistencias_empleado.php" class="row g-3">
                <div class="col-md-4">
                    <label class="form-label"><i class="fas fa-calendar-month"></i> Mes</label>
                    <select name="mes" class="form-select" required>
                        <?php for ($m = 1; $m <= 12; $m++): ?>
                            <option value="<?php echo $m; ?>" <?php echo $mes == $m ? 'selected' : ''; ?>>
                                <?php echo $meses[$m]; ?>
                            </option>
                        <?php endfor; ?>
                    </select>
                </div>
                <div class="col-md-4">
                    <label class="form-label"><i class="fas fa-calendar-year"></i> Año</label>
                    <select name="anio" class="form-select" required>
                        <?php for ($a = date('Y') - 2; $a <= date('Y') + 2; $a++): ?>
                            <option value="<?php echo $a; ?>" <?php echo $anio == $a ? 'selected' : ''; ?>>
                                <?php echo $a; ?>
                            </option>
                        <?php endfor; ?>
                    </select>
                </div>
                <div class="col-md-4 d-flex align-items-end">
                    <button type="submit" class="btn btn-primary w-100">
                        <i class="fas fa-search"></i> Ver asistencias
                    </button>
                </div>
            </form>
        </div>
    </div>

    <?php if (!empty($asistencias)): ?>
        <!-- Resumen -->
        <div class="row mb-4">
            <div class="col-md-3">
                <div class="card text-center">
                    <div class="card-body">
                        <h6 class="text-muted">Días puntuales</h6>
                        <h3 class="text-success mb-0"><?php echo $resumen['puntual']; ?></h3>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card text-center">
                    <div class="card-body">
                        <h6 class="text-muted">Días con tardanza</h6>
                        <h3 class="text-warning mb-0"><?php echo $resumen['tardanza']; ?></h3>
                        <small class="text-muted"><?php echo $resumen['minutos_tardanza']; ?> min (<?php echo $resumen['horas_tardanza']; ?> h)</small>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card text-center">
                    <div class="card-body">
                        <h6 class="text-muted">Días con falta</h6>
                        <h3 class="text-danger mb-0"><?php echo $resumen['faltas']; ?></h3>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card text-center">
                    <div class="card-body">
                        <h6 class="text-muted">Total días programados</h6>
                        <h3 class="mb-0"><?php echo count($asistencias); ?></h3>
                    </div>
                </div>
            </div>
        </div>

        <!-- Tabla simple -->
        <div class="card mb-4">
            <div class="card-header bg-primary text-white">
                <h5 class="mb-0"><i class="fas fa-table"></i> Detalle de asistencias</h5>
            </div>
            <div class="card-body p-0">
                <div class="table-responsive">
                    <table class="table table-striped mb-0">
                        <thead>
                            <tr>
                                <th>Fecha</th>
                                <th>Horario</th>
                                <th>Entrada programada</th>
                                <th>Entrada registrada</th>
                                <th>Estado</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php foreach ($asistencias as $a): ?>
                            <?php
                                $fecha = date('d/m/Y', strtotime($a['fecha']));
                                $horaProg = !empty($a['hora_entrada']) ? date('H:i', strtotime($a['hora_entrada'])) : '-';
                                $regEntrada = !empty($a['reg_entrada']) ? date('H:i', strtotime($a['reg_entrada'])) : '-';
                                $estado = $a['tipo_entrada'] ?? 'sin';
                                $textoEstado = '-';
                                $clase = '';
                                if ($estado === 'puntual') { $textoEstado = 'Puntual'; $clase = 'text-success'; }
                                elseif ($estado === 'tardanza') { $textoEstado = 'Tardanza'; $clase = 'text-warning'; }
                                elseif ($estado === 'falta') { $textoEstado = 'Falta'; $clase = 'text-danger'; }
                            ?>
                            <tr>
                                <td><?php echo $fecha; ?></td>
                                <td>
                                    <?php if (!empty($a['horario_sigla'])): ?>
                                        <span class="badge bg-secondary"><?php echo htmlspecialchars($a['horario_sigla']); ?></span>
                                    <?php endif; ?>
                                    <br>
                                    <small><?php echo htmlspecialchars($a['horario_denominacion'] ?? '-'); ?></small>
                                </td>
                                <td><?php echo $horaProg; ?></td>
                                <td><?php echo $regEntrada; ?></td>
                                <td class="<?php echo $clase; ?>"><?php echo $textoEstado; ?></td>
                            </tr>
                        <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

        <!-- Gráfico: línea de asistencia (programada vs real) -->
        <?php if (!empty($datosGrafico)): ?>
            <div class="card">
                <div class="card-header" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color:white;">
                    <h5 class="mb-0"><i class="fas fa-chart-line"></i> Comparación de asistencia (línea correcta vs real)</h5>
                </div>
                <div class="card-body">
                    <div style="position:relative;height:400px;">
                        <canvas id="graficoLineaAsistencia"></canvas>
                    </div>
                </div>
            </div>
        <?php endif; ?>
    <?php else: ?>
        <div class="alert alert-info">
            No se encontraron asistencias para el período seleccionado.
        </div>
    <?php endif; ?>
</div>

<?php if (!empty($datosGrafico)): ?>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    const ctx = document.getElementById('graficoLineaAsistencia');
    if (!ctx) return;

    const datos = <?php echo json_encode($datosGrafico); ?>;
    const etiquetas = datos.map(d => d.fecha_formato);

    const conv = m => m === null ? null : (Math.floor(m / 60) + (m % 60) / 60);
    const lineaCorrecta = datos.map(d => conv(d.hora_prog_min));
    const lineaReal = datos.map(d => conv(d.hora_real_min));

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: etiquetas,
            datasets: [
                {
                    label: 'Línea correcta (entrada programada)',
                    data: lineaCorrecta,
                    borderColor: 'rgba(40,167,69,1)',
                    borderDash: [5,5],
                    fill: false,
                    tension: 0.3
                },
                {
                    label: 'Asistencia real (entrada registrada)',
                    data: lineaReal,
                    borderColor: 'rgba(220,53,69,1)',
                    fill: false,
                    tension: 0.3
                }
            ]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            scales: {
                y: {
                    title: { display: true, text: 'Hora del día' },
                    ticks: {
                        callback: function (value) {
                            const h = Math.floor(value);
                            const m = Math.round((value - h) * 60);
                            return String(h).padStart(2,'0') + ':' + String(m).padStart(2,'0');
                        }
                    }
                }
            },
            plugins: {
                tooltip: {
                    callbacks: {
                        label: function (ctx) {
                            if (ctx.parsed.y == null) return ctx.dataset.label + ': sin registro';
                            const h = Math.floor(ctx.parsed.y);
                            const m = Math.round((ctx.parsed.y - h) * 60);
                            return ctx.dataset.label + ': ' +
                                String(h).padStart(2,'0') + ':' +
                                String(m).padStart(2,'0');
                        }
                    }
                }
            }
        }
    });
});
</script>
<?php endif; ?>

<?php
include_once 'includes/footer.php';
?>

