-- Script para criar usuário admin hamam
-- Execute: psql -h localhost -U postgres -d maktubia_points -f criar-usuario-admin.sql

DO $$
DECLARE
    v_user_id INTEGER;
    v_admin_role_id INTEGER;
    v_wallet_id INTEGER;
    v_password_hash TEXT;
BEGIN
    -- Obter o role_id de admin (assumindo que existe um role chamado 'admin')
    SELECT role_id INTO v_admin_role_id 
    FROM roles 
    WHERE role_name = 'admin' 
    LIMIT 1;
    
    -- Se não existir role admin, criar
    IF v_admin_role_id IS NULL THEN
        INSERT INTO roles (role_name, description, permissions) 
        VALUES ('admin', 'Administrador do sistema', '{"*": ["*"]}'::jsonb)
        RETURNING role_id INTO v_admin_role_id;
    END IF;
    
    -- Gerar hash da senha (bcrypt)
    -- Nota: Este é um hash de exemplo. O ideal é usar bcrypt no Node.js
    -- Para produção, você deve usar: bcrypt.hash('@21062014', 10)
    -- Aqui vamos inserir e depois atualizar via Node.js ou usar o método correto
    
    -- Verificar se usuário já existe
    SELECT user_id INTO v_user_id 
    FROM users 
    WHERE username = 'hamam' OR email = 'hamam@maktubia.com';
    
    IF v_user_id IS NULL THEN
        -- Inserir usuário
        INSERT INTO users (username, email, password_hash, role_id, is_active, created_at, updated_at)
        VALUES (
            'hamam',
            'hamam@maktubia.com',
            '$2b$10$placeholder', -- Será atualizado depois
            v_admin_role_id,
            TRUE,
            NOW(),
            NOW()
        )
        RETURNING user_id INTO v_user_id;
        
        -- Criar perfil
        INSERT INTO users_profile (user_id, name, phone, created_at, updated_at)
        VALUES (
            v_user_id,
            'Hamam Admin',
            '+258844232354',
            NOW(),
            NOW()
        );
        
        -- Criar carteira
        INSERT INTO wallets (user_id, balance, points_balance, created_at, updated_at)
        VALUES (
            v_user_id,
            0.00,
            0,
            NOW(),
            NOW()
        )
        RETURNING wallet_id INTO v_wallet_id;
        
        RAISE NOTICE 'Usuário criado com sucesso! User ID: %, Role ID: %, Wallet ID: %', v_user_id, v_admin_role_id, v_wallet_id;
    ELSE
        RAISE NOTICE 'Usuário já existe com ID: %', v_user_id;
        
        -- Atualizar para admin se não for
        UPDATE users 
        SET role_id = v_admin_role_id, is_active = TRUE 
        WHERE user_id = v_user_id;
    END IF;
END $$;

-- Mostrar o usuário criado
SELECT u.user_id, u.username, u.email, r.role_name, u.is_active, wp.name, w.points_balance
FROM users u
LEFT JOIN roles r ON u.role_id = r.role_id
LEFT JOIN users_profile wp ON u.user_id = wp.user_id
LEFT JOIN wallets w ON u.user_id = w.user_id
WHERE u.username = 'hamam';












