<?php
declare(strict_types=1);
require_once __DIR__.'/auth.php';require_once __DIR__.'/inventario_helpers.php';tiPermExigir($mysqli,'inventario_geral','editar');$mysqli->set_charset('utf8mb4');
$campanhaId=(int)($_GET['campanha_id']??$_POST['campanha_id']??0);$camp=invCampanha($mysqli,$campanhaId);if(!$camp){http_response_code(404);exit('Campanha não encontrada.');}$csrf=invCsrf();$erro='';
if($_SERVER['REQUEST_METHOD']==='POST'){
 try{invValidarCsrf();$acao=invTexto($_POST['acao']??'conferir',30);$usuario=tiPermUsuario();if($acao==='regularizar'){$itemId=(int)($_POST['item_id']??0);$item=invItem($mysqli,$itemId);if(!$item||(int)$item['campanha_id']!==$campanhaId)throw new RuntimeException('Item não encontrado.');$stmt=$mysqli->prepare('UPDATE ti_inventario_itens SET regularizado=1,regularizado_por=?,regularizado_em=NOW() WHERE id=?');$stmt->bind_param('si',$usuario,$itemId);$stmt->execute();$stmt->close();invRegistrarEvento($mysqli,$campanhaId,$itemId,'DIVERGENCIA_REGULARIZADA','Divergência marcada como regularizada',$item['codigo_ativo_snapshot']);invFlash('sucesso','Divergência marcada como regularizada.');invRedirecionar('inventario_campanha.php?id='.$campanhaId.'&resultado='.rawurlencode((string)$item['resultado']));}
  if($acao==='avulso'){$ident=invTexto($_POST['identificador_informado']??'',180);if($ident==='')throw new RuntimeException('Informe o identificador encontrado.');$desc=invNulo($_POST['descricao']??'',500);$setor=invNulo($_POST['setor_encontrado']??'',180);$amb=invNulo($_POST['ambiente_encontrado']??'',180);$cond=invNulo($_POST['condicao']??'',40);$stmt=$mysqli->prepare("INSERT INTO ti_inventario_avulsos(campanha_id,identificador_informado,descricao,setor_encontrado,ambiente_encontrado,condicao,situacao,registrado_por) VALUES(?,?,?,?,?,?,'SEM_CADASTRO',?)");$stmt->bind_param('issssss',$campanhaId,$ident,$desc,$setor,$amb,$cond,$usuario);$stmt->execute();$stmt->close();invRegistrarEvento($mysqli,$campanhaId,null,'ITEM_SEM_CADASTRO','Equipamento encontrado sem cadastro',$ident.' • '.($desc?:'Sem descrição'));invFlash('sucesso','Equipamento sem cadastro registrado para regularização.');invRedirecionar('inventario_campanha.php?id='.$campanhaId.'&busca='.rawurlencode($ident));}
  $itemId=(int)($_POST['item_id']??0);$ativoId=(int)($_POST['ativo_id']??0);
  if($itemId<=0&&$ativoId>0){$todos=invAtivos($mysqli);$a=null;foreach($todos as $x)if((int)$x['id']===$ativoId){$a=$x;break;}if(!$a)throw new RuntimeException('Ativo não localizado.');$stmt=$mysqli->prepare("INSERT INTO ti_inventario_itens(campanha_id,ativo_id,esperado,codigo_ativo_snapshot,tipo_ativo_snapshot,nome_snapshot,patrimonio_snapshot,serie_snapshot,identificador_snapshot,responsavel_esperado,setor_esperado,ambiente_esperado,local_esperado,resultado) VALUES(?,?,0,?,?,?,?,?,?,?,?,?,?,'FORA_LISTA') ON DUPLICATE KEY UPDATE esperado=0,resultado='FORA_LISTA'");$stmt->bind_param('iisssssssssss',$campanhaId,$ativoId,$a['codigo_ativo'],$a['tipo_ativo'],$a['nome'],$a['patrimonio'],$a['serie'],$a['identificador'],$a['responsavel'],$a['setor'],$a['ambiente'],$a['local']);$stmt->execute();$itemId=(int)($stmt->insert_id?:0);$stmt->close();if($itemId<=0){$stmt=$mysqli->prepare('SELECT id FROM ti_inventario_itens WHERE campanha_id=? AND ativo_id=?');$stmt->bind_param('ii',$campanhaId,$ativoId);$stmt->execute();$itemId=(int)($stmt->get_result()->fetch_assoc()['id']??0);$stmt->close();}}
  $item=invItem($mysqli,$itemId);if(!$item|| (int)$item['campanha_id']!==$campanhaId)throw new RuntimeException('Item da campanha não encontrado.');$resultado=invTexto($_POST['resultado']??'CORRETO',40);$permitidos=['CORRETO','LOCAL_DIVERGENTE','RESPONSAVEL_DIVERGENTE','DANIFICADO','NAO_LOCALIZADO','FORA_LISTA'];if(!in_array($resultado,$permitidos,true))throw new RuntimeException('Resultado inválido.');$resp=invNulo($_POST['responsavel_encontrado']??($item['responsavel_esperado']??''),180);$setor=invNulo($_POST['setor_encontrado']??($item['setor_esperado']??''),180);$amb=invNulo($_POST['ambiente_encontrado']??($item['ambiente_esperado']??''),180);$local=invNulo($_POST['local_encontrado']??($item['local_esperado']??''),220);$cond=invNulo($_POST['condicao_encontrada']??'',40);$obs=invNulo($_POST['observacoes']??'',5000);
  $stmt=$mysqli->prepare('UPDATE ti_inventario_itens SET resultado=?,responsavel_encontrado=?,setor_encontrado=?,ambiente_encontrado=?,local_encontrado=?,condicao_encontrada=?,observacoes=?,conferido_por=?,conferido_em=NOW() WHERE id=?');$stmt->bind_param('ssssssssi',$resultado,$resp,$setor,$amb,$local,$cond,$obs,$usuario,$itemId);$stmt->execute();$stmt->close();
  $stmt=$mysqli->prepare('UPDATE ti_ativos SET ultima_conferencia_em=NOW(),ultima_conferencia_por=? WHERE id=?');$stmt->bind_param('si',$usuario,$item['ativo_id']);$stmt->execute();$stmt->close();
  if(invTabelaExiste($mysqli,'ti_ativo_conferencias')){$stmt=$mysqli->prepare('INSERT INTO ti_ativo_conferencias(ativo_id,resultado,responsavel_confirmado,setor_encontrado,ambiente_encontrado,local_encontrado,condicao,observacoes,conferido_por) VALUES(?,?,?,?,?,?,?,?,?)');$stmt->bind_param('issssssss',$item['ativo_id'],$resultado,$resp,$setor,$amb,$local,$cond,$obs,$usuario);$stmt->execute();$stmt->close();}
  invRegistrarEvento($mysqli,$campanhaId,$itemId,'ITEM_CONFERIDO','Ativo conferido',invResultadoRotulo($resultado).' • '.$item['codigo_ativo_snapshot']);invFlash('sucesso','Conferência registrada com sucesso.');invRedirecionar('inventario_campanha.php?id='.$campanhaId.'&busca='.rawurlencode((string)$item['codigo_ativo_snapshot']));
 }catch(Throwable $e){$erro=$e->getMessage();}
}
$itemId=(int)($_GET['item_id']??0);$ativoId=(int)($_GET['ativo_id']??0);$item=$itemId>0?invItem($mysqli,$itemId):null;$ativo=null;if(!$item&&$ativoId>0){foreach(invAtivos($mysqli) as $a)if((int)$a['id']===$ativoId){$ativo=$a;break;}}if(!$item&&!$ativo){http_response_code(404);exit('Ativo não encontrado para conferência.');}
$d=$item?:['ativo_id'=>$ativo['id'],'codigo_ativo_snapshot'=>$ativo['codigo_ativo'],'tipo_ativo_snapshot'=>$ativo['tipo_ativo'],'nome_snapshot'=>$ativo['nome'],'patrimonio_snapshot'=>$ativo['patrimonio'],'serie_snapshot'=>$ativo['serie'],'identificador_snapshot'=>$ativo['identificador'],'responsavel_esperado'=>$ativo['responsavel'],'setor_esperado'=>$ativo['setor'],'ambiente_esperado'=>$ativo['ambiente'],'local_esperado'=>$ativo['local'],'resultado'=>'FORA_LISTA'];
?>
<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Conferir Ativo</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet"><link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet"><link href="governanca_style.css?v=1" rel="stylesheet"></head><body><div class="top"></div><div class="grid-bg"></div><div class="app"><header class="header"><div class="header-inner"><div class="brand"><div class="logo"><img src="assets/logo_pref.jpg" alt=""></div><div><span class="eyebrow"><i class="bi <?=invTipoIcone($d['tipo_ativo_snapshot'])?>"></i><?=invE($d['codigo_ativo_snapshot'])?></span><h1><?=invE($d['nome_snapshot'])?></h1><p>Patrimônio: <?=invE($d['patrimonio_snapshot']?:'não informado')?> • Série/identificador: <?=invE($d['serie_snapshot']?:($d['identificador_snapshot']?:'não informado'))?></p></div></div><a class="head-btn primary" href="inventario_campanha.php?id=<?=$campanhaId?>"><i class="bi bi-arrow-left"></i>Campanha</a></div></header><main class="main"><?php if($erro):?><div class="flash error"><?=invE($erro)?></div><?php endif;?><section class="form-card"><h3><i class="bi bi-clipboard2-check-fill"></i> Registrar conferência física</h3><div class="alert info" style="margin-top:12px"><strong>Dados esperados:</strong> <?=invE($d['responsavel_esperado']?:'sem responsável')?> • <?=invE(trim(($d['setor_esperado']?:'').' • '.($d['ambiente_esperado']?:'').' • '.($d['local_esperado']?:''),' •')?:'sem localização')?></div><form method="post" style="margin-top:14px"><input type="hidden" name="csrf_token" value="<?=invE($csrf)?>"><input type="hidden" name="campanha_id" value="<?=$campanhaId?>"><input type="hidden" name="item_id" value="<?=(int)($item['id']??0)?>"><input type="hidden" name="ativo_id" value="<?=(int)$d['ativo_id']?>"><div class="form-grid"><div class="form-group"><label>Resultado *</label><select class="control" name="resultado" required><?php foreach(['CORRETO','LOCAL_DIVERGENTE','RESPONSAVEL_DIVERGENTE','DANIFICADO','NAO_LOCALIZADO','FORA_LISTA'] as $r):?><option value="<?=$r?>" <?=($d['resultado']??'')===$r?'selected':''?>><?=invE(invResultadoRotulo($r))?></option><?php endforeach;?></select></div><div class="form-group"><label>Condição encontrada</label><select class="control" name="condicao_encontrada"><option value="">Não avaliada</option><option>BOM</option><option>REGULAR</option><option>DANIFICADO</option><option>INOPERANTE</option></select></div><div class="form-group"><label>Responsável encontrado</label><input class="control" name="responsavel_encontrado" value="<?=invE($d['responsavel_esperado'])?>"></div><div class="form-group"><label>Setor encontrado</label><input class="control" name="setor_encontrado" value="<?=invE($d['setor_esperado'])?>"></div><div class="form-group"><label>Ambiente / sala</label><input class="control" name="ambiente_encontrado" value="<?=invE($d['ambiente_esperado'])?>"></div><div class="form-group"><label>Posição exata</label><input class="control" name="local_encontrado" value="<?=invE($d['local_esperado'])?>"></div><div class="form-group full"><label>Observações</label><textarea class="control" name="observacoes" placeholder="Explique divergências, danos, etiquetas ausentes ou providências necessárias..."></textarea></div></div><div class="actions"><button class="button green"><i class="bi bi-check-circle-fill"></i>Salvar conferência</button></div></form></section></main></div></body></html>
