<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

require_once __DIR__ . '/../config/database.php';
$pdo = conectarBanco();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['erro' => 'Método não permitido']);
    exit();
}

try {
    $id = $_POST['id'] ?? '';
    $nome = $_POST['nome'] ?? '';
    $email = $_POST['email'] ?? '';
    $usuario = $_POST['usuario'] ?? '';
    $senha = $_POST['senha'] ?? '';
    $nivel_acesso = $_POST['nivel_acesso'] ?? 'gestor';
    $status = $_POST['status'] ?? 'ativo';
    $telefone = $_POST['telefone'] ?? '';
    $departamento = $_POST['departamento'] ?? '';
    $observacoes = $_POST['observacoes'] ?? '';
    
    // Validações
    if (empty($nome) || empty($email) || empty($usuario) || empty($nivel_acesso)) {
        throw new Exception('Campos obrigatórios não preenchidos');
    }
    
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new Exception('Email inválido');
    }
    
    if (!in_array($nivel_acesso, ['gestor', 'supervisor', 'admin'])) {
        throw new Exception('Nível de acesso inválido');
    }
    
    if (!in_array($status, ['ativo', 'inativo', 'bloqueado'])) {
        throw new Exception('Status inválido');
    }
    
    $pdo->beginTransaction();
    
    if (empty($id)) {
        // INSERIR NOVO GESTOR
        if (empty($senha)) {
            throw new Exception('Senha é obrigatória para novo gestor');
        }
        
        // Verificar se usuário ou email já existem
        $checkSql = "SELECT id FROM gestores WHERE usuario = ? OR email = ?";
        $checkStmt = $pdo->prepare($checkSql);
        $checkStmt->execute([$usuario, $email]);
        
        if ($checkStmt->fetch()) {
            throw new Exception('Usuário ou email já cadastrado');
        }
        
        $senhaHash = password_hash($senha, PASSWORD_BCRYPT);
        
        $sql = "INSERT INTO gestores (nome, email, usuario, senha, nivel_acesso, telefone, 
                                     departamento, status, observacoes, criado_por) 
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([
            $nome, $email, $usuario, $senhaHash, $nivel_acesso, 
            $telefone, $departamento, $status, $observacoes, 
            1 // Assumindo que o usuário logado é ID 1 (admin)
        ]);
        
        $gestorId = $pdo->lastInsertId();
        $mensagem = 'Gestor cadastrado com sucesso';
        
    } else {
        // ATUALIZAR GESTOR EXISTENTE
        
        // Verificar se usuário ou email já existem (exceto o próprio registro)
        $checkSql = "SELECT id FROM gestores WHERE (usuario = ? OR email = ?) AND id != ?";
        $checkStmt = $pdo->prepare($checkSql);
        $checkStmt->execute([$usuario, $email, $id]);
        
        if ($checkStmt->fetch()) {
            throw new Exception('Usuário ou email já cadastrado por outro gestor');
        }
        
        // Construir query de atualização
        if (!empty($senha)) {
            // Atualizar com nova senha
            $senhaHash = password_hash($senha, PASSWORD_BCRYPT);
            $sql = "UPDATE gestores SET nome = ?, email = ?, usuario = ?, senha = ?, 
                                       nivel_acesso = ?, telefone = ?, departamento = ?, 
                                       status = ?, observacoes = ? 
                    WHERE id = ?";
            $params = [$nome, $email, $usuario, $senhaHash, $nivel_acesso, 
                      $telefone, $departamento, $status, $observacoes, $id];
        } else {
            // Atualizar sem alterar senha
            $sql = "UPDATE gestores SET nome = ?, email = ?, usuario = ?, 
                                       nivel_acesso = ?, telefone = ?, departamento = ?, 
                                       status = ?, observacoes = ? 
                    WHERE id = ?";
            $params = [$nome, $email, $usuario, $nivel_acesso, 
                      $telefone, $departamento, $status, $observacoes, $id];
        }
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
        
        $gestorId = $id;
        $mensagem = 'Gestor atualizado com sucesso';
    }
    
    $pdo->commit();
    
    // Buscar dados atualizados do gestor
    $selectSql = "SELECT id, nome, email, usuario, nivel_acesso, telefone, 
                         departamento, status, data_criacao, data_ultimo_acesso
                  FROM gestores WHERE id = ?";
    $selectStmt = $pdo->prepare($selectSql);
    $selectStmt->execute([$gestorId]);
    $gestorAtualizado = $selectStmt->fetch(PDO::FETCH_ASSOC);
    
    echo json_encode([
        'sucesso' => true,
        'gestor' => $gestorAtualizado,
        'mensagem' => $mensagem
    ]);
    
} catch (Exception $e) {
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    
    http_response_code(400);
    echo json_encode([
        'sucesso' => false,
        'erro' => $e->getMessage()
    ]);
}
?> 
