// ── MODELOS DE PAINEL ──────────────────────────────────────────────────── function rotaModelos($acao, $db) { switch ($acao) { case 'listar_modelos': $modelos = $db->query("SELECT * FROM modelos_painel WHERE ativo = 1 ORDER BY nome")->fetchAll(); resposta(['ok' => true, 'modelos' => $modelos]); break; case 'salvar_modelo': $input = json_decode(file_get_contents('php://input'), true) ?? $_POST; $nome = trim($input['nome'] ?? ''); $pixel = floatval($input['pixel_mm'] ?? 0); $gabLarg = floatval($input['gab_largura'] ?? 0); $gabAlt = floatval($input['gab_altura'] ?? 0); if (!$nome || !$pixel || !$gabLarg || !$gabAlt) { resposta(['erro' => 'Nome, pixel, largura e altura são obrigatórios.'], 400); } $gabNome = sprintf('%dx%d mm', round($gabLarg*1000), round($gabAlt*1000)); $id = $input['id'] ?? null; if ($id) { $db->prepare("UPDATE modelos_painel SET nome=?,pixel_mm=?,gab_largura=?,gab_altura=?,nome_gabinete=?,brilho=?,ip=?,consumo=?,refresh=?,peso=?,scan=?,material=?,res_gabinete=? WHERE id=?") ->execute([$nome,$pixel,$gabLarg,$gabAlt,$gabNome, $input['brilho']??'',$input['ip']??'',$input['consumo']??'', $input['refresh']??'',$input['peso']??'',$input['scan']??'', $input['material']??'',$input['res_gabinete']??'',$id]); resposta(['ok' => true, 'msg' => "Modelo \"$nome\" atualizado!"]); } else { $db->prepare("INSERT INTO modelos_painel (nome,pixel_mm,gab_largura,gab_altura,nome_gabinete,brilho,ip,consumo,refresh,peso,scan,material,res_gabinete) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)") ->execute([$nome,$pixel,$gabLarg,$gabAlt,$gabNome, $input['brilho']??'',$input['ip']??'',$input['consumo']??'', $input['refresh']??'',$input['peso']??'',$input['scan']??'', $input['material']??'',$input['res_gabinete']??'']); resposta(['ok' => true, 'id' => (int)$db->lastInsertId(), 'msg' => "Modelo \"$nome\" cadastrado!"]); } break; case 'apagar_modelo': $id = (int)($_GET['id'] ?? 0); if (!$id) resposta(['erro' => 'ID inválido.'], 400); $db->prepare("UPDATE modelos_painel SET ativo = 0 WHERE id = ?")->execute([$id]); resposta(['ok' => true, 'msg' => 'Modelo removido.']); break; } } // Adicionar ao switch principal - modelos não precisam de senha pois são dados técnicos if (in_array($acao, ['listar_modelos','salvar_modelo','apagar_modelo'])) { verificarSenha($senha); rotaModelos($acao, getDB()); }