<?php
declare(strict_types=1);
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/conexao.php';
require_once __DIR__ . '/computadores_helpers.php';
if (compEhCynthia()) { http_response_code(403); exit('Acesso negado.'); }
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); exit('Método inválido.'); }
try {
    compValidarCsrf();
    compGarantirEstrutura($mysqli);
    $termoId = (int) ($_POST['termo_id'] ?? 0);
    if ($termoId <= 0 || empty($_FILES['arquivo'])) throw new RuntimeException('Selecione o termo assinado.');
    $arquivo = $_FILES['arquivo'];
    if (($arquivo['error'] ?? UPLOAD_ERR_NO_FILE) !== UPLOAD_ERR_OK) throw new RuntimeException('Falha no envio do arquivo.');
    if ((int)$arquivo['size'] > 12*1024*1024) throw new RuntimeException('O arquivo ultrapassa 12 MB.');
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime = (string)$finfo->file($arquivo['tmp_name']);
    $permitidos = ['application/pdf'=>'pdf','image/jpeg'=>'jpg','image/png'=>'png'];
    if (!isset($permitidos[$mime])) throw new RuntimeException('Envie PDF, JPG ou PNG.');
    $stmt=$mysqli->prepare("SELECT id, arquivo_assinado FROM ti_computador_termos WHERE id=?");$stmt->bind_param('i',$termoId);$stmt->execute();$termo=$stmt->get_result()->fetch_assoc();$stmt->close();
    if(!$termo) throw new RuntimeException('Termo não encontrado.');
    $pastaRelativa='uploads/termos_computadores/'.date('Y/m');
    $pasta=__DIR__.'/'.$pastaRelativa;
    if(!is_dir($pasta) && !mkdir($pasta,0775,true) && !is_dir($pasta)) throw new RuntimeException('Não foi possível criar a pasta de documentos.');
    $nome='termo_'.$termoId.'_'.bin2hex(random_bytes(8)).'.'.$permitidos[$mime];
    $destino=$pasta.'/'.$nome;
    if(!move_uploaded_file($arquivo['tmp_name'],$destino)) throw new RuntimeException('Não foi possível salvar o documento.');
    $relativo=$pastaRelativa.'/'.$nome;$original=compTexto($arquivo['name'],255);$tamanho=(int)$arquivo['size'];$hash=hash_file('sha256',$destino);$usuario=compUsuarioAtual();
    $stmt=$mysqli->prepare("UPDATE ti_computador_termos SET status='ASSINADO', arquivo_assinado=?, nome_original=?, mime_type=?, tamanho_bytes=?, hash_sha256=?, enviado_por=?, enviado_em=NOW() WHERE id=?");
    $stmt->bind_param('sssissi',$relativo,$original,$mime,$tamanho,$hash,$usuario,$termoId);
    if(!$stmt->execute()){ $erro=$stmt->error;$stmt->close();@unlink($destino);throw new RuntimeException('Não foi possível vincular o arquivo: '.$erro);}$stmt->close();
    compFlash('sucesso','Termo assinado anexado com sucesso.','visualizar_termo_computador.php?termo_id='.$termoId);
    compRedirecionar('termo_responsabilidade_computador.php?termo_id='.$termoId);
} catch(Throwable $e){compFlash('erro',$e->getMessage());compRedirecionar('computadores.php');}