<?php
header('Content-Type: application/json');
session_start();

try {
    require_once 'conexao.php';
    
    // Verificar se tenant_id está na sessão
    if (!isset($_SESSION['tenant_id'])) {
        throw new Exception('Tenant não identificado na sessão.');
    }
    $tenantId = (int) $_SESSION['tenant_id'];
    
    // Verificar se é uma requisição POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('Método não permitido');
    }
    
    // Validar ID do cliente
    if (!isset($_POST['id']) || !is_numeric($_POST['id'])) {
        throw new Exception('ID do cliente inválido');
    }
    
    $clienteId = intval($_POST['id']);
    
    // Coletar e sanitizar dados
    $campos = [
        'nome' => FILTER_SANITIZE_STRING,
        'email' => FILTER_SANITIZE_EMAIL,
        'telefone' => FILTER_SANITIZE_STRING,
        'celular' => FILTER_SANITIZE_STRING,
        'cpf_cnpj' => FILTER_SANITIZE_STRING,
        'endereco' => FILTER_SANITIZE_STRING,
        'cidade' => FILTER_SANITIZE_STRING,
        'estado' => FILTER_SANITIZE_STRING,
        'origem' => FILTER_SANITIZE_STRING,
        'data_cadastro' => FILTER_SANITIZE_STRING,
        'status' => FILTER_VALIDATE_INT,
        'observacoes' => FILTER_SANITIZE_STRING
    ];
    
    $dados = filter_input_array(INPUT_POST, $campos);
    
    // Validar campos obrigatórios
 // Só exija o nome se for uma atualização completa (você pode usar uma flag POST como 'modo')
if (!isset($dados['status']) || !is_numeric($dados['status'])) {
    if (empty($dados['nome'])) {
        throw new Exception('O nome do cliente é obrigatório');
    }
}

    // Verificar se o cliente pertence ao tenant do usuário
    $verificaSql = "SELECT id FROM clientes WHERE id = ? AND tenant_id = ?";
    $verificaStmt = $conn->prepare($verificaSql);
    $verificaStmt->bind_param("ii", $clienteId, $tenantId);
    $verificaStmt->execute();
    $verificaResult = $verificaStmt->get_result();
    if ($verificaResult->num_rows === 0) {
        throw new Exception('Cliente não encontrado ou acesso negado.');
    }
    $verificaStmt->close();
    
    // Preparar e executar a atualização com filtro tenant_id para segurança
    $sql = "UPDATE clientes SET 
            Nome_Cliente = ?,
            Email = ?,
            Telefone = ?,
            Celular = ?,
            CPF_CNPJ = ?,
            Endereco = ?,
            Cidade = ?,
            Estado = ?,
            Origem = ?,
            Data_Cadastro = ?,
            status = ?,
            Observacoes = ?
            WHERE id = ? AND tenant_id = ?";
    
    $stmt = $conn->prepare($sql);
    
    if (!$stmt) {
        throw new Exception('Erro na preparação da consulta: ' . $conn->error);
    }
    
    $stmt->bind_param(
        "sssssssssisisi",
        $dados['nome'],
        $dados['email'],
        $dados['telefone'],
        $dados['celular'],
        $dados['cpf_cnpj'],
        $dados['endereco'],
        $dados['cidade'],
        $dados['estado'],
        $dados['origem'],
        $dados['data_cadastro'],
        $dados['status'],
        $dados['observacoes'],
        $clienteId,
        $tenantId
    );
    
    if (!$stmt->execute()) {
        throw new Exception('Erro ao atualizar cliente: ' . $stmt->error);
    }
    
    // Retornar sucesso
    echo json_encode([
        'success' => true,
        'message' => 'Cliente atualizado com sucesso'
    ]);
    
} catch (Exception $e) {
    // Retornar erro em formato JSON
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
} finally {
    if (isset($stmt)) {
        $stmt->close();
    }
    if (isset($conn)) {
        $conn->close();
    }
}
