<?php
// salvar_novo.php — Salva novo cliente OU novo material
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/functions.php';
requireLogin();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: cliente_form.php'); exit;
}

if (!verifyCsrf($_POST['csrf_token'] ?? '')) die('CSRF inválido');

$tipoEntidade = trim($_POST['tipo_entidade'] ?? 'cliente');

// ── SALVAR MATERIAL ───────────────────────────────────────────────
if ($tipoEntidade === 'material') {
    requirePerfil(['ADMIN','OPERADOR','GERENTE']);
    $nome   = trim($_POST['nome']               ?? '');
    $tipo   = trim($_POST['tipo']               ?? 'PRODUTO');
    // Garante que só valores válidos do ENUM sejam inseridos
    if (!in_array($tipo, ['PRODUTO','SERVICO','ATIVO'], true)) $tipo = 'PRODUTO';
    $cat    = trim($_POST['categoria']          ?? '');
    $unid   = trim($_POST['unidade']            ?? 'un');
    $qtd    = max(0, (int)($_POST['quantidade_estoque'] ?? 0));
    $alerta = max(0, (int)($_POST['alerta_minimo']      ?? 5));
    $cod    = trim($_POST['codigo_barra']       ?? '') ?: null;

    if (!$nome) {
        header('Location: materiais.php?erro=' . urlencode('Nome do material é obrigatório.'));
        exit;
    }
    try {
        pdo()->prepare(
            "INSERT INTO materiais (nome, tipo, categoria, unidade, quantidade_estoque, alerta_minimo, codigo_barra)
             VALUES (?,?,?,?,?,?,?)"
        )->execute([$nome, $tipo, $cat ?: null, $unid, $qtd, $alerta, $cod]);
        header('Location: materiais.php?msg=' . urlencode("✓ Material \"$nome\" cadastrado!"));
    } catch (PDOException $e) {
        header('Location: materiais.php?erro=' . urlencode('Erro ao salvar: ' . $e->getMessage()));
    }
    exit;
}

// ── Sanitização ──
$nome         = mb_convert_case(trim($_POST['nome']        ?? ''), MB_CASE_TITLE, 'UTF-8');
$documento    = trim($_POST['documento']   ?? '');
$telefone     = trim($_POST['telefone']    ?? '');
$email        = trim($_POST['email']       ?? '');
$cidade       = trim($_POST['endereco_cidade']       ?? '');
$cep          = trim($_POST['endereco_cep']          ?? '');
$logradouro   = trim($_POST['endereco_logradouro']   ?? '');
$numero       = trim($_POST['endereco_numero']       ?? '');
$bairro       = trim($_POST['endereco_bairro']       ?? '');
$complemento  = trim($_POST['endereco_complemento'] ?? '');
$lat          = trim($_POST['latitude']    ?? '') ?: null;
$lng          = trim($_POST['longitude']   ?? '') ?: null;
$vlan         = trim($_POST['vlan']        ?? '');
$plano        = trim($_POST['plano']       ?? '');
$pppoeU       = trim($_POST['pppoe_usuario'] ?? '');
$pppoeS       = trim($_POST['pppoe_senha']   ?? '');
$ssid2g       = trim($_POST['wifi_ssid_2g']  ?? '');
$pass2g       = trim($_POST['wifi_senha_2g'] ?? '');
$ssid5g       = trim($_POST['wifi_ssid_5g']  ?? '');
$pass5g       = trim($_POST['wifi_senha_5g'] ?? '');
$codConexao   = trim($_POST['cod_conexao']   ?? '') ?: null;
$rotModel     = trim($_POST['modelo_roteador'] ?? '') ?: null;
$passEquip    = trim($_POST['password_equipamento'] ?? '');
$possuiRot    = isset($_POST['possui_roteador']) ? 1 : 0;
$possuiRep    = isset($_POST['possui_repetidor']) ? 1 : 0;
$modRep       = trim($_POST['modelo_repetidor'] ?? '') ?: null;
$possuiCam    = isset($_POST['possui_cameras']) ? 1 : 0;
$camLocal     = trim($_POST['camera_local']  ?? '');
$obs          = trim($_POST['observacoes']   ?? '');
$ativo        = 1;
$bloqueado    = 0;
$destino      = trim($_POST['destino_pos_salvar'] ?? 'editar');

// Contatos extras → JSON
$contatosExtra = [];
foreach ($_POST['contatos_extra'] ?? [] as $ct) {
    $ct = trim($ct);
    if ($ct) $contatosExtra[] = ['label' => '', 'tel' => $ct];
}
$contatosJson = $contatosExtra ? json_encode($contatosExtra, JSON_UNESCAPED_UNICODE) : null;

if (!$nome) {
    header('Location: cliente_form.php?erro=' . urlencode('Nome é obrigatório.')); exit;
}

try {
    $stmt = pdo()->prepare(
        "INSERT INTO clientes (
            nome, documento, telefone, email,
            endereco_cidade, endereco_cep, endereco_logradouro,
            endereco_numero, endereco_bairro, endereco_complemento,
            latitude, longitude, vlan,
            plano, pppoe_usuario, pppoe_senha,
            wifi_ssid_2g, wifi_senha_2g, wifi_ssid_5g, wifi_senha_5g,
            cod_conexao, possui_roteador, modelo_roteador, password_equipamento,
            possui_repetidor, modelo_repetidor,
            possui_cameras, camera_local,
            contatos_extra, observacoes,
            ativo, bloqueado, data_cadastro
        ) VALUES (
            ?, ?, ?, ?,
            ?, ?, ?,
            ?, ?, ?,
            ?, ?, ?,
            ?, ?, ?,
            ?, ?, ?, ?,
            ?, ?, ?, ?,
            ?, ?,
            ?, ?,
            ?, ?,
            ?, ?, NOW()
        )"
    );

    $stmt->execute([
        $nome, $documento, $telefone, $email,
        $cidade, $cep, $logradouro,
        $numero, $bairro, $complemento,
        $lat, $lng, $vlan,
        $plano, $pppoeU, $pppoeS,
        $ssid2g, $pass2g, $ssid5g, $pass5g,
        $codConexao, $possuiRot, $rotModel, $passEquip,
        $possuiRep, $modRep,
        $possuiCam, $camLocal,
        $contatosJson, $obs,
        $ativo, $bloqueado,
    ]);

    $clienteId = (int)pdo()->lastInsertId();

    switch ($destino) {
        case 'os':
            header("Location: os_form.php?cliente_id=$clienteId");
            break;
        case 'geo':
            header("Location: geocalizacao.php?id=$clienteId");
            break;
        case 'infra':
            header("Location: infraestrutura.php?id=$clienteId");
            break;
        default: // 'editar'
            header("Location: cliente_detalhe.php?id=$clienteId&msg=Cliente+cadastrado+com+sucesso!");
            break;
    }
    exit;

} catch (PDOException $e) {
    $err = urlencode('Erro ao salvar: ' . $e->getMessage());
    header("Location: cliente_form.php?erro=$err"); exit;
}

