<?php
if(!isset($conn)) require_once __DIR__.'/../../config/auth.php';
$conn->query("ALTER TABLE tareas ADD COLUMN IF NOT EXISTS avance TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER estado");
$conn->query("ALTER TABLE tareas ADD COLUMN IF NOT EXISTS creado_por_usuario_id INT UNSIGNED NULL AFTER responsable_id");
$conn->query("CREATE TABLE IF NOT EXISTS tarea_adjuntos (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,tarea_id INT UNSIGNED NOT NULL,seguimiento_id INT UNSIGNED NULL,nombre_original VARCHAR(255) NOT NULL,nombre_archivo VARCHAR(255) NOT NULL,mime VARCHAR(150) NULL,tamano INT UNSIGNED NOT NULL DEFAULT 0,usuario_id INT UNSIGNED NULL,creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,INDEX idx_adj_tarea(tarea_id),CONSTRAINT fk_adj_tarea FOREIGN KEY(tarea_id) REFERENCES tareas(id) ON DELETE CASCADE,CONSTRAINT fk_adj_seg FOREIGN KEY(seguimiento_id) REFERENCES tarea_seguimientos(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

function tareas_es_admin(mysqli $conn): bool {
 $uid=(int)($_SESSION['user_id']??0);if(!$uid)return false;
 $r=$conn->query("SELECT r.nombre FROM usuarios u JOIN roles r ON r.id=u.rol_id WHERE u.id=$uid")->fetch_assoc();
 return ($r['nombre']??'')==='Administrador';
}
function tareas_colaborador_id(mysqli $conn): int {
 $uid=(int)($_SESSION['user_id']??0);if(!$uid)return 0;
 $u=$conn->query("SELECT colaborador_id,nombre,usuario,email FROM usuarios WHERE id=$uid")->fetch_assoc();if(!$u)return 0;
 if(!empty($u['colaborador_id']))return (int)$u['colaborador_id'];
 $email=$conn->real_escape_string((string)($u['email']??''));$nombre=$conn->real_escape_string((string)($u['nombre']?:$u['usuario']));
 $sql=$email!==''?"SELECT id FROM colaboradores WHERE estado='Activo' AND (email='$email' OR CONCAT(nombres,' ',apellidos) LIKE '%$nombre%') ORDER BY email='$email' DESC LIMIT 1":"SELECT id FROM colaboradores WHERE estado='Activo' AND CONCAT(nombres,' ',apellidos) LIKE '%$nombre%' LIMIT 1";
 return (int)($conn->query($sql)->fetch_assoc()['id']??0);
}
function tareas_usuario_id(): int {return (int)($_SESSION['user_id']??0);}
function tareas_responsables_supervisados(mysqli $conn): array {
 $uid=tareas_usuario_id();if(!$uid)return [];
 $q=$conn->query("SELECT DISTINCT uc.colaborador_id FROM usuario_supervisa_tipos ust JOIN usuarios u ON u.tipo_usuario_id=ust.tipo_usuario_id JOIN usuario_colaboradores uc ON uc.usuario_id=u.id WHERE ust.usuario_id=$uid AND u.activo=1");$ids=[];while($r=$q->fetch_assoc())$ids[]=(int)$r['colaborador_id'];return $ids;
}
function tareas_colaboradores_propios(mysqli $conn): array {$uid=tareas_usuario_id();$ids=[];if($uid){$q=$conn->query("SELECT colaborador_id FROM usuario_colaboradores WHERE usuario_id=$uid");while($r=$q->fetch_assoc())$ids[]=(int)$r['colaborador_id'];}return $ids;}
function tareas_puede_ver(mysqli $conn,array $tarea,bool $admin,int $colaborador): bool {
 if($admin||(int)($tarea['creado_por_usuario_id']??0)===tareas_usuario_id()||($colaborador>0&&(int)$tarea['responsable_id']===$colaborador)||in_array((int)$tarea['responsable_id'],tareas_colaboradores_propios($conn),true))return true;
 return in_array((int)$tarea['responsable_id'],tareas_responsables_supervisados($conn),true);
}
function tareas_alcance_sql(bool $admin,int $colaborador,string $alias='t'): string {
 global $conn;if($admin)return '1=1';$uid=tareas_usuario_id();$partes=[];
 if($uid>0)$partes[]="$alias.creado_por_usuario_id=$uid";
 if($colaborador>0)$partes[]="$alias.responsable_id=$colaborador";
 $propios=tareas_colaboradores_propios($conn);if($propios)$partes[]="$alias.responsable_id IN (".implode(',',$propios).')';
 $supervisados=tareas_responsables_supervisados($conn);if($supervisados)$partes[]="$alias.responsable_id IN (".implode(',',$supervisados).')';
 return $partes?'('.implode(' OR ',$partes).')':'1=0';
}
function guardar_adjunto_tarea(mysqli $conn,int $tareaId,?int $seguimientoId,string $campo='adjuntos'): void {
 if(empty($_FILES[$campo]['name']))return;$nombres=(array)$_FILES[$campo]['name'];$tmps=(array)$_FILES[$campo]['tmp_name'];$errores=(array)$_FILES[$campo]['error'];$tamanos=(array)$_FILES[$campo]['size'];
 $dir=dirname(__DIR__,2).'/uploads/tareas';if(!is_dir($dir))mkdir($dir,0775,true);$permitidos=['pdf','doc','docx','xls','xlsx','jpg','jpeg','png','txt','zip'];
 foreach($nombres as $i=>$original){if(($errores[$i]??UPLOAD_ERR_NO_FILE)!==UPLOAD_ERR_OK)continue;$ext=strtolower(pathinfo($original,PATHINFO_EXTENSION));if(!in_array($ext,$permitidos,true)||($tamanos[$i]??0)>10485760)continue;$archivo=bin2hex(random_bytes(16)).'.'.$ext;if(!move_uploaded_file($tmps[$i],$dir.'/'.$archivo))continue;$mime=function_exists('mime_content_type')?mime_content_type($dir.'/'.$archivo):'';$uid=(int)($_SESSION['user_id']??0);$s=$conn->prepare('INSERT INTO tarea_adjuntos(tarea_id,seguimiento_id,nombre_original,nombre_archivo,mime,tamano,usuario_id) VALUES(?,?,?,?,?,?,?)');$s->bind_param('iisssii',$tareaId,$seguimientoId,$original,$archivo,$mime,$tamanos[$i],$uid);$s->execute();}
}
