<?php
require_once __DIR__.'/../../config/auth.php';
$criterios=['Calidad del Trabajo','Cantidad de Trabajo','Conocimiento del Cargo','Cooperación','Iniciativa','Resolución de Problemas y toma de Decisiones','Responsabilidad','Ausentismo (Cantidad de ausencias en el período)','Puntualidad (Cantidad de llegadas tardías en el período)'];
$significados=[1=>'Insuficiente',2=>'Deficiente',3=>'Regular',4=>'Bueno',5=>'Óptimo'];
$accion=$_GET['accion']??'listar';$id=(int)($_GET['id']??0);$error='';
if(($_SERVER['REQUEST_METHOD']??'GET')==='POST'){
 $colaborador=(int)($_POST['colaborador_id']??0);$fecha=limpiar($_POST['fecha_evaluacion']??'');$periodo=limpiar($_POST['periodo']??'');$evaluador=limpiar($_POST['evaluador_nombre']??'');$acciones=limpiar($_POST['acciones_propuestas']??'');$grados=(array)($_POST['grado']??[]);$descripciones=(array)($_POST['descripcion']??[]);
 if(!$colaborador||!$fecha||!$periodo||!$evaluador)$error='Funcionario, fecha, período y evaluador son obligatorios.';
 foreach($criterios as $i=>$criterio)if(!isset($grados[$i])||(int)$grados[$i]<1||(int)$grados[$i]>5)$error='Debe asignar un grado de 1 a 5 a todos los criterios.';
 if(!$error){$c=$conn->query("SELECT c.*,d.nombre departamento,ca.nombre cargo_nombre FROM colaboradores c LEFT JOIN departamentos d ON d.id=c.departamento_id LEFT JOIN cargos ca ON ca.id=c.cargo_id WHERE c.id=$colaborador")->fetch_assoc();if(!$c)$error='Funcionario no encontrado.';else{$total=array_sum(array_map('intval',$grados));$uid=(int)$_SESSION['user_id'];$genero=$c['sexo']??'';$departamento=$c['departamento']??'';$rango=limpiar($_POST['rango_cargo']??'');$cargo=$c['cargo_nombre']??'';$conn->begin_transaction();try{$s=$conn->prepare('INSERT INTO evaluaciones_funcionarios(colaborador_id,fecha_evaluacion,periodo,evaluador_usuario_id,evaluador_nombre,departamento_area,rango_cargo,cargo,genero,acciones_propuestas,puntaje_total,creado_por_usuario_id) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)');$s->bind_param('ississssssii',$colaborador,$fecha,$periodo,$uid,$evaluador,$departamento,$rango,$cargo,$genero,$acciones,$total,$uid);$s->execute();$evaluacionId=$s->insert_id;$d=$conn->prepare('INSERT INTO evaluacion_funcionario_detalles(evaluacion_id,criterio_orden,criterio,grado,significado,descripcion) VALUES(?,?,?,?,?,?)');foreach($criterios as $i=>$criterio){$orden=$i+1;$grado=(int)$grados[$i];$significado=$significados[$grado];$descripcion=limpiar($descripciones[$i]??'');$d->bind_param('iisiss',$evaluacionId,$orden,$criterio,$grado,$significado,$descripcion);$d->execute();}registrar_auditoria($conn,'INSERT','evaluaciones_funcionarios',$evaluacionId,'Evaluación de funcionario');$conn->commit();header("Location: evaluacion_funcionarios.php?accion=ver&id=$evaluacionId&guardada=1");exit;}catch(Throwable $e){$conn->rollback();$error='No fue posible guardar la evaluación.';}}}
}
$colaboradores=$conn->query("SELECT id,CONCAT(apellidos, ', ', nombres) nombre FROM colaboradores WHERE estado='Activo' ORDER BY apellidos,nombres");
include __DIR__.'/../../includes/header.php';include __DIR__.'/../../includes/sidebar.php';?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content"><style>#resultado{font-size:1.25rem;padding:.75rem 1.4rem;min-width:190px;display:inline-block;text-align:center;box-shadow:0 4px 12px rgba(0,0,0,.15)}#total{font-size:1.5rem;color:#1769aa}.resultado-final{font-size:1.5rem;font-weight:700;padding:18px;text-align:center;border-radius:10px;box-shadow:0 5px 16px rgba(0,0,0,.15);margin:16px 0}</style><?php if($accion==='ver'):?><script>document.addEventListener('DOMContentLoaded',()=>{const m=document.body.innerText.match(/Puntaje:\s*(\d+)\s*\/\s*45/);if(!m)return;const t=Number(m[1]),r=t>=41?'Óptimo':t>=32?'Bueno':t>=23?'Regular':t>=14?'Deficiente':'Insuficiente',c=t>=41?'alert-success':t>=32?'alert-primary':t>=23?'alert-warning':'alert-danger';const d=document.createElement('div');d.className='resultado-final alert '+c;d.innerHTML='RESULTADO FINAL: '+r+'<div style="font-size:1rem;font-weight:400">'+t+' puntos de 45</div>';document.querySelector('.content>.card')?.before(d)});</script><?php endif;?>
<?php if($accion==='nuevo'):?><div class="d-flex justify-content-between"><div><h3 class="page-title">Nueva Evaluación de Funcionarios</h3><p class="text-muted">Escala: 1 Insuficiente, 2 Deficiente, 3 Regular, 4 Bueno, 5 Óptimo.</p></div><a class="btn btn-outline-secondary align-self-start" href="evaluacion_funcionarios.php">Volver</a></div><?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?><form method="post"><div class="card card-hm mb-3"><div class="card-body"><div class="row g-3"><div class="col-md-6"><label>Nombre completo del evaluado *</label><select class="form-select" name="colaborador_id" required><option value="">Seleccione</option><?php while($c=$colaboradores->fetch_assoc()):?><option value="<?=$c['id']?>" <?=(int)($_POST['colaborador_id']??0)===(int)$c['id']?'selected':''?>><?=e($c['nombre'])?></option><?php endwhile;?></select></div><div class="col-md-3"><label>Fecha de evaluación *</label><input class="form-control" type="date" name="fecha_evaluacion" value="<?=e($_POST['fecha_evaluacion']??date('Y-m-d'))?>" required></div><div class="col-md-3"><label>Período de evaluación *</label><input class="form-control" name="periodo" value="<?=e($_POST['periodo']??date('Y'))?>" required></div><div class="col-md-6"><label>Evaluador *</label><input class="form-control" name="evaluador_nombre" value="<?=e($_POST['evaluador_nombre']??($_SESSION['nombre']??$_SESSION['usuario']??''))?>" required></div><div class="col-md-6"><label>Rango</label><input class="form-control" name="rango_cargo" value="<?=e($_POST['rango_cargo']??'')?>"></div></div></div></div><div class="card card-hm mb-3"><div class="card-body table-responsive"><table class="table align-middle"><thead><tr><th style="min-width:300px">Criterio de evaluación</th><th style="width:210px">Grado asignado</th><th>Descripción / comentario</th></tr></thead><tbody><?php foreach($criterios as $i=>$criterio):?><tr><td><b><?=($i+1).'. '.e($criterio)?></b></td><td><select class="form-select grado" name="grado[<?=$i?>]" required><option value="">Seleccione</option><?php foreach($significados as $valor=>$texto):?><option value="<?=$valor?>" <?=(int)($grados[$i]??0)===$valor?'selected':''?>><?=$valor?> - <?=e($texto)?></option><?php endforeach;?></select></td><td><input class="form-control" name="descripcion[<?=$i?>]" value="<?=e($descripciones[$i]??'')?>" placeholder="Observación opcional"></td></tr><?php endforeach;?></tbody><tfoot><tr><th>Total</th><th><span id="total">0</span> / 45</th><th><span id="resultado" class="badge bg-secondary">Sin calificar</span></th></tr></tfoot></table></div></div><div class="card card-hm"><div class="card-body"><label>Acciones propuestas por el responsable/evaluador para ayudar al evaluado en su desempeño</label><textarea class="form-control" name="acciones_propuestas" rows="4"><?=e($_POST['acciones_propuestas']??'')?></textarea><button class="btn btn-hm mt-3"><i class="fa fa-save me-1"></i>Guardar evaluación</button></div></div></form><script>function calcular(){let t=0,c=0;document.querySelectorAll('.grado').forEach(x=>{if(x.value){t+=Number(x.value);c++}});document.getElementById('total').textContent=t;let r='Sin calificar';if(c===9)r=t>=41?'Óptimo':t>=32?'Bueno':t>=23?'Regular':t>=14?'Deficiente':'Insuficiente';document.getElementById('resultado').textContent=r}document.querySelectorAll('.grado').forEach(x=>x.addEventListener('change',calcular));calcular()</script>
<?php elseif($accion==='ver'):$e=$conn->query("SELECT ef.*,CONCAT(c.nombres,' ',c.apellidos) funcionario FROM evaluaciones_funcionarios ef JOIN colaboradores c ON c.id=ef.colaborador_id WHERE ef.id=$id")->fetch_assoc();if(!$e){http_response_code(404);exit('Evaluación no encontrada.');}$detalles=$conn->query("SELECT * FROM evaluacion_funcionario_detalles WHERE evaluacion_id=$id ORDER BY criterio_orden");?><div class="d-flex justify-content-between"><div><h3 class="page-title">Evaluación de <?=e($e['funcionario'])?></h3><p class="text-muted"><?=e(date('d/m/Y',strtotime($e['fecha_evaluacion'])))?> · Período <?=e($e['periodo'])?></p></div><div><button class="btn btn-outline-primary" onclick="window.print()"><i class="fa fa-print"></i> Imprimir</button> <a class="btn btn-outline-secondary" href="evaluacion_funcionarios.php">Volver</a></div></div><?php if(isset($_GET['guardada'])):?><div class="alert alert-success">Evaluación guardada correctamente.</div><?php endif;?><div class="card card-hm mb-3"><div class="card-body"><div class="row g-2"><div class="col-md-4"><b>Evaluador:</b> <?=e($e['evaluador_nombre'])?></div><div class="col-md-4"><b>Departamento/Área:</b> <?=e($e['departamento_area']?:'—')?></div><div class="col-md-4"><b>Cargo:</b> <?=e($e['cargo']?:'—')?></div><div class="col-md-4"><b>Género:</b> <?=e($e['genero']?:'—')?></div><div class="col-md-4"><b>Rango:</b> <?=e($e['rango_cargo']?:'—')?></div><div class="col-md-4"><b>Puntaje:</b> <?=(int)$e['puntaje_total']?> / 45</div></div></div></div><div class="card card-hm mb-3"><div class="card-body table-responsive"><table class="table"><thead><tr><th>Criterio</th><th>Grado</th><th>Significado</th><th>Descripción</th></tr></thead><tbody><?php while($d=$detalles->fetch_assoc()):?><tr><td><?=$d['criterio_orden']?>. <?=e($d['criterio'])?></td><td><b><?=$d['grado']?></b></td><td><?=e($d['significado'])?></td><td><?=e($d['descripcion']?:'—')?></td></tr><?php endwhile;?></tbody><tfoot><tr><th>Total</th><th><?=(int)$e['puntaje_total']?></th><th colspan="2"></th></tr></tfoot></table></div></div><div class="card card-hm"><div class="card-body"><h6>Acciones propuestas</h6><p class="mb-0"><?=nl2br(e($e['acciones_propuestas']?:'Sin acciones registradas.'))?></p></div></div>
<?php else:$lista=$conn->query("SELECT ef.id,ef.fecha_evaluacion,ef.periodo,ef.evaluador_nombre,ef.puntaje_total,CONCAT(c.apellidos,', ',c.nombres) funcionario FROM evaluaciones_funcionarios ef JOIN colaboradores c ON c.id=ef.colaborador_id ORDER BY ef.fecha_evaluacion DESC,ef.id DESC");?><div class="d-flex justify-content-between align-items-center mb-3"><div><h3 class="page-title">Evaluación de Funcionarios</h3><p class="text-muted mb-0">Historial de evaluaciones de desempeño.</p></div><a class="btn btn-hm" href="?accion=nuevo"><i class="fa fa-plus me-1"></i>Nueva evaluación</a></div><div class="card card-hm"><div class="card-body table-responsive"><table class="table table-hover"><thead><tr><th>Fecha</th><th>Funcionario</th><th>Período</th><th>Evaluador</th><th>Puntaje</th><th></th></tr></thead><tbody><?php while($e=$lista->fetch_assoc()):?><tr><td><?=e(date('d/m/Y',strtotime($e['fecha_evaluacion'])))?></td><td><?=e($e['funcionario'])?></td><td><?=e($e['periodo'])?></td><td><?=e($e['evaluador_nombre'])?></td><td><b><?=$e['puntaje_total']?> / 45</b></td><td><a class="btn btn-sm btn-outline-primary" href="?accion=ver&id=<?=$e['id']?>">Ver</a></td></tr><?php endwhile;?></tbody></table></div></div><?php endif;?>
</div></main><?php include __DIR__.'/../../includes/footer.php';?>
