<?php
require_once __DIR__.'/../../config/auth.php';
$accion=$_GET['accion']??'lista';$id=(int)($_GET['id']??0);$error='';$uidActual=(int)($_SESSION['user_id']??0);$rolActual=$conn->query("SELECT r.nombre FROM usuarios u LEFT JOIN roles r ON r.id=u.rol_id WHERE u.id=$uidActual")->fetch_assoc();$esAdmin=($rolActual['nombre']??'')==='Administrador';
$datos=['cliente_id'=>'','responsable_id'=>'','solicitante'=>'','titulo'=>'','detalle'=>'','fecha_vencimiento'=>'','estado'=>'Pendiente','importe'=>null];

if($_SERVER['REQUEST_METHOD']==='POST'){
    $tipo=$_POST['tipo']??'tarea';
    if($tipo==='eliminar'){
        if(!$esAdmin){http_response_code(403);exit('Sólo el Administrador puede eliminar tareas.');}
        $tareaId=(int)($_POST['tarea_id']??0);
        if($tareaId){
            $stmt=$conn->prepare('DELETE FROM tareas WHERE id=?');$stmt->bind_param('i',$tareaId);$stmt->execute();$stmt->close();
            registrar_auditoria($conn,'DELETE','tareas',$tareaId,'Eliminación de tarea');
        }
        header('Location: /HM/modules/movimientos/tareas.php?eliminada=1');exit;
    }
    if($tipo==='seguimiento'){
        $tareaId=(int)($_POST['tarea_id']??0);$detalle=limpiar($_POST['detalle_seguimiento']??'');
        if($tareaId&&$detalle!==''){
            $stmt=$conn->prepare('INSERT INTO tarea_seguimientos(tarea_id,detalle) VALUES(?,?)');
            $stmt->bind_param('is',$tareaId,$detalle);$stmt->execute();$stmt->close();
            registrar_auditoria($conn,'INSERT','tarea_seguimientos',$stmt->insert_id??null,'Seguimiento de tarea');
        }
        header("Location: /HM/modules/movimientos/tareas.php?accion=ver&id=$tareaId&seguimiento=1");exit;
    }

    $id=(int)($_POST['id']??0);
    $datos['cliente_id']=(int)($_POST['cliente_id']??0);
    $datos['responsable_id']=(int)($_POST['responsable_id']??0);
    $datos['solicitante']=limpiar($_POST['solicitante']??'');
    $datos['titulo']=limpiar($_POST['titulo']??'');
    $datos['detalle']=limpiar($_POST['detalle']??'');
    $datos['fecha_vencimiento']=$_POST['fecha_vencimiento']??'';
    $datos['estado']=in_array($_POST['estado']??'', ['Pendiente','En Proceso','Finalizado','Cancelado'],true)?$_POST['estado']:'Pendiente';
    $datos['importe']=($_POST['importe']??'')===''?null:numero_entero($_POST['importe']);
    if(!$datos['cliente_id']||!$datos['responsable_id']||$datos['titulo']===''||$datos['detalle']===''||$datos['fecha_vencimiento']==='')$error='Cliente, responsable, título, detalle y fecha de vencimiento son obligatorios.';
    if(!$error){
        $fechaAnterior=null;
        if($id){
            $anterior=$conn->query("SELECT fecha_vencimiento FROM tareas WHERE id=$id")->fetch_assoc();$fechaAnterior=$anterior['fecha_vencimiento']??null;
            $stmt=$conn->prepare('UPDATE tareas SET cliente_id=?,responsable_id=?,solicitante=?,titulo=?,detalle=?,fecha_vencimiento=?,estado=?,importe=? WHERE id=?');
            $stmt->bind_param('iisssssdi',$datos['cliente_id'],$datos['responsable_id'],$datos['solicitante'],$datos['titulo'],$datos['detalle'],$datos['fecha_vencimiento'],$datos['estado'],$datos['importe'],$id);
        }else{
            $stmt=$conn->prepare('INSERT INTO tareas(cliente_id,responsable_id,solicitante,titulo,detalle,fecha_vencimiento,estado,importe) VALUES(?,?,?,?,?,?,?,?)');
            $stmt->bind_param('iisssssd',$datos['cliente_id'],$datos['responsable_id'],$datos['solicitante'],$datos['titulo'],$datos['detalle'],$datos['fecha_vencimiento'],$datos['estado'],$datos['importe']);
        }
        $stmt->execute();$tareaId=$id?:$stmt->insert_id;$stmt->close();
        if($id && $fechaAnterior!==$datos['fecha_vencimiento']){
            $desde=$fechaAnterior?date('d/m/Y',strtotime($fechaAnterior)):'sin fecha';$hasta=date('d/m/Y',strtotime($datos['fecha_vencimiento']));
            $texto="Se cambió la fecha de vencimiento de $desde a $hasta.";
            $seg=$conn->prepare('INSERT INTO tarea_seguimientos(tarea_id,detalle) VALUES(?,?)');$seg->bind_param('is',$tareaId,$texto);$seg->execute();$seg->close();
        }
        registrar_auditoria($conn,$id?'UPDATE':'INSERT','tareas',$tareaId,'Gestión de tarea');
        header("Location: /HM/modules/movimientos/tareas.php?accion=ver&id=$tareaId&guardada=1");exit;
    }
}

if($id){
    $stmt=$conn->prepare('SELECT * FROM tareas WHERE id=?');$stmt->bind_param('i',$id);$stmt->execute();$encontrada=$stmt->get_result()->fetch_assoc();$stmt->close();
    if(!$encontrada){header('Location: /HM/modules/movimientos/tareas.php');exit;}$datos=$encontrada;
}
$clientes=$conn->query("SELECT id,nombre FROM clientes WHERE estado='Activo' ORDER BY nombre");
$responsables=$conn->query("SELECT id,CONCAT(nombres,' ',apellidos) nombre FROM colaboradores WHERE estado='Activo' ORDER BY nombres,apellidos");
include __DIR__.'/../../includes/header.php';include __DIR__.'/../../includes/sidebar.php';
?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content">
<?php if($accion==='lista'):
 $fCliente=(int)($_GET['cliente_id']??0);$fResponsable=(int)($_GET['responsable_id']??0);$fEstado=$_GET['estado']??'';$buscar=limpiar($_GET['buscar']??'');
 $condiciones=['1=1'];if($fCliente)$condiciones[]="t.cliente_id=$fCliente";if($fResponsable)$condiciones[]="t.responsable_id=$fResponsable";
 if(in_array($fEstado,['Pendiente','En Proceso','Finalizado','Cancelado'],true))$condiciones[]="t.estado='".$conn->real_escape_string($fEstado)."'";
 if($buscar!==''){$q=$conn->real_escape_string($buscar);$condiciones[]="t.titulo LIKE '%$q%'";}
 $lista=$conn->query("SELECT t.*,c.nombre cliente,CONCAT(co.nombres,' ',co.apellidos) responsable,(SELECT COUNT(*) FROM tarea_seguimientos s WHERE s.tarea_id=t.id) seguimientos FROM tareas t JOIN clientes c ON c.id=t.cliente_id JOIN colaboradores co ON co.id=t.responsable_id WHERE ".implode(' AND ',$condiciones)." ORDER BY t.creado_en DESC,t.id DESC");
 $clientesFiltro=$conn->query("SELECT id,nombre FROM clientes WHERE estado='Activo' ORDER BY nombre");
 $responsablesFiltro=$conn->query("SELECT id,CONCAT(nombres,' ',apellidos) nombre FROM colaboradores WHERE estado='Activo' ORDER BY nombres,apellidos");
?>
<div class="d-flex justify-content-between align-items-center mb-3"><div><h3 class="page-title mb-1">Tareas</h3><p class="text-muted mb-0">Asignación, estado y seguimiento de tareas.</p></div><a class="btn btn-hm" href="?accion=nuevo"><i class="fa fa-plus me-1"></i>Nueva tarea</a></div>
<?php if(isset($_GET['eliminada'])):?><div class="alert alert-success">La tarea y todos sus seguimientos fueron eliminados.</div><?php endif;?>
<form class="card card-body mb-3 no-print"><div class="row g-2">
 <div class="col-md-3"><label>Cliente</label><select class="form-select" name="cliente_id"><option value="0">Todos</option><?php while($c=$clientesFiltro->fetch_assoc()):?><option value="<?=$c['id']?>" <?=$fCliente==$c['id']?'selected':''?>><?=e($c['nombre'])?></option><?php endwhile;?></select></div>
 <div class="col-md-3"><label>Responsable</label><select class="form-select" name="responsable_id"><option value="0">Todos</option><?php while($r=$responsablesFiltro->fetch_assoc()):?><option value="<?=$r['id']?>" <?=$fResponsable==$r['id']?'selected':''?>><?=e($r['nombre'])?></option><?php endwhile;?></select></div>
 <div class="col-md-2"><label>Estado</label><select class="form-select" name="estado"><option value="">Todos</option><?php foreach(['Pendiente','En Proceso','Finalizado','Cancelado'] as $o):?><option <?=$fEstado===$o?'selected':''?>><?=$o?></option><?php endforeach;?></select></div>
 <div class="col-md-3"><label>Buscar por título</label><input class="form-control" name="buscar" value="<?=e($buscar)?>" placeholder="Título de la tarea"></div>
 <div class="col-md-1 d-flex align-items-end"><button class="btn btn-hm">Filtrar</button></div>
</div></form>
<div class="card card-hm"><div class="card-body table-responsive"><table class="table table-hover"><thead><tr><th>Fecha</th><th>Vencimiento</th><th>Cliente</th><th>Responsable</th><th>Solicitante</th><th>Título</th><th>Estado</th><th class="text-end">Importe</th><th class="text-end">Seguimientos</th><th></th></tr></thead><tbody>
<?php while($t=$lista->fetch_assoc()):$color=['Pendiente'=>'warning','En Proceso'=>'primary','Finalizado'=>'success','Cancelado'=>'secondary'][$t['estado']]??'secondary';$vencida=$t['fecha_vencimiento']&&$t['fecha_vencimiento']<date('Y-m-d')&&in_array($t['estado'],['Pendiente','En Proceso'],true);?><tr class="<?=$vencida?'table-danger':''?>"><td><?=e(date('d/m/Y',strtotime($t['creado_en'])))?></td><td><?=e($t['fecha_vencimiento']?date('d/m/Y',strtotime($t['fecha_vencimiento'])):'—')?></td><td><?=e($t['cliente'])?></td><td><?=e($t['responsable'])?></td><td><?=e($t['solicitante']?:'—')?></td><td><?=e($t['titulo'])?></td><td><span class="badge bg-<?=$color?>"><?=e($t['estado'])?></span></td><td class="text-end"><?=$t['importe']===null?'—':numero_py($t['importe'])?></td><td class="text-end"><?=numero_py($t['seguimientos'])?></td><td><a class="btn btn-sm btn-outline-primary" href="?accion=ver&id=<?=$t['id']?>">Abrir</a></td></tr><?php endwhile;?>
</tbody></table></div></div>

<?php elseif($accion==='ver'):
 $vista=$conn->query("SELECT t.*,c.nombre cliente,CONCAT(co.nombres,' ',co.apellidos) responsable FROM tareas t JOIN clientes c ON c.id=t.cliente_id JOIN colaboradores co ON co.id=t.responsable_id WHERE t.id=$id")->fetch_assoc();
 $seguimientos=$conn->query("SELECT * FROM tarea_seguimientos WHERE tarea_id=$id ORDER BY creado_en DESC,id DESC");
 $color=['Pendiente'=>'warning','En Proceso'=>'primary','Finalizado'=>'success','Cancelado'=>'secondary'][$vista['estado']]??'secondary';
?>
<?php if(isset($_GET['guardada'])):?><div class="alert alert-success">Tarea guardada correctamente.</div><?php endif;?><?php if(isset($_GET['seguimiento'])):?><div class="alert alert-success">Seguimiento agregado correctamente.</div><?php endif;?>
<div class="d-flex justify-content-between align-items-center mb-3"><div><a href="/HM/modules/movimientos/tareas.php">← Volver</a><h3 class="page-title my-2"><?=e($vista['titulo'])?></h3></div><div class="d-flex gap-2"><a class="btn btn-outline-primary" href="?accion=editar&id=<?=$id?>">Editar tarea</a><form method="post" onsubmit="return confirm('¿Eliminar esta tarea? También se eliminarán todos sus seguimientos.');"><input type="hidden" name="tipo" value="eliminar"><input type="hidden" name="tarea_id" value="<?=$id?>"><button class="btn btn-outline-danger">Eliminar tarea</button></form></div></div>
<div class="card card-hm mb-3"><div class="card-body"><div class="row g-3"><div class="col-md-6"><b>Cliente:</b> <?=e($vista['cliente'])?></div><div class="col-md-6"><b>Responsable:</b> <?=e($vista['responsable'])?></div><div class="col-md-6"><b>Solicitante:</b> <?=e($vista['solicitante']?:'—')?></div><div class="col-md-3"><b>Vencimiento:</b> <?=e($vista['fecha_vencimiento']?date('d/m/Y',strtotime($vista['fecha_vencimiento'])):'—')?></div><div class="col-md-3"><b>Estado:</b> <span class="badge bg-<?=$color?>"><?=e($vista['estado'])?></span></div><div class="col-md-3 text-end"><b>Importe:</b> <?=$vista['importe']===null?'—':numero_py($vista['importe'])?></div><div class="col-12"><b>Detalle:</b><p class="mt-2"><?=nl2br(e($vista['detalle']))?></p></div></div></div></div>
<div class="card card-hm"><div class="card-body"><h5>Seguimientos</h5><form method="post" class="mb-4"><input type="hidden" name="tipo" value="seguimiento"><input type="hidden" name="tarea_id" value="<?=$id?>"><textarea class="form-control mb-2" name="detalle_seguimiento" rows="3" required placeholder="Detalle del seguimiento"></textarea><button class="btn btn-hm">Agregar seguimiento</button></form><hr>
<?php if(!$seguimientos->num_rows):?><p class="text-muted">Sin seguimientos registrados.</p><?php endif;?><?php while($s=$seguimientos->fetch_assoc()):?><div class="border-start border-3 ps-3 mb-3"><small class="text-muted"><?=e(date('d/m/Y H:i',strtotime($s['creado_en'])))?></small><div><?=nl2br(e($s['detalle']))?></div></div><?php endwhile;?>
</div></div>

<?php else:?>
<a href="/HM/modules/movimientos/tareas.php">← Volver</a><h3 class="page-title my-3"><?=$id?'Editar':'Nueva'?> tarea</h3><?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?>
<div class="card card-hm"><div class="card-body"><form method="post"><input type="hidden" name="id" value="<?=$id?>"><div class="row g-3">
 <div class="col-md-6"><label>Cliente *</label><select class="form-select" name="cliente_id" required><option value="">Seleccione</option><?php while($c=$clientes->fetch_assoc()):?><option value="<?=$c['id']?>" <?=$datos['cliente_id']==$c['id']?'selected':''?>><?=e($c['nombre'])?></option><?php endwhile;?></select></div>
 <div class="col-md-6"><label>Responsable *</label><select class="form-select" name="responsable_id" required><option value="">Seleccione</option><?php while($r=$responsables->fetch_assoc()):?><option value="<?=$r['id']?>" <?=$datos['responsable_id']==$r['id']?'selected':''?>><?=e($r['nombre'])?></option><?php endwhile;?></select></div>
 <div class="col-md-6"><label>Solicitante (opcional)</label><input class="form-control" name="solicitante" value="<?=e($datos['solicitante'])?>"></div>
 <div class="col-12"><label>Título de la tarea *</label><input class="form-control" name="titulo" maxlength="200" value="<?=e($datos['titulo'])?>" required></div>
 <div class="col-md-3"><label>Fecha de vencimiento *</label><input class="form-control" type="date" name="fecha_vencimiento" value="<?=e($datos['fecha_vencimiento'])?>" required></div>
 <div class="col-md-3"><label>Estado *</label><select class="form-select" name="estado"><?php foreach(['Pendiente','En Proceso','Finalizado','Cancelado'] as $o):?><option <?=$datos['estado']===$o?'selected':''?>><?=$o?></option><?php endforeach;?></select></div>
 <div class="col-md-3"><label>Importe (opcional)</label><input class="form-control numero-miles text-end" name="importe" value="<?=$datos['importe']===null?'':numero_py($datos['importe'])?>"></div>
 <div class="col-12"><label>Detalle de la tarea *</label><textarea class="form-control" name="detalle" rows="5" required><?=e($datos['detalle'])?></textarea></div>
</div><button class="btn btn-hm mt-3">Guardar tarea</button></form></div></div>
<?php endif;?></div></main><?php include __DIR__.'/../../includes/footer.php';?>
