#!/bin/bash
# Script para criar clientes de exemplo na VPS
# Execute na VPS: bash criar-clientes-exemplo.sh

cd /var/www/maktubia-backend

echo "👥 Criando clientes de exemplo..."
echo ""

# Gerar hash da senha "12345678"
PASSWORD_HASH=$(node -e "const bcrypt = require('bcrypt'); bcrypt.hash('12345678', 10).then(hash => { console.log(hash); process.exit(0); });")

echo "🔐 Hash da senha gerado: ${PASSWORD_HASH:0:30}..."
echo ""

# Obter role_id do role "user"
ROLE_ID=$(sudo -u postgres psql -d maktubia_points -t -c "SELECT role_id FROM roles WHERE role_name = 'user' LIMIT 1;" | xargs)

if [ -z "$ROLE_ID" ]; then
    echo "❌ Role 'user' não encontrado. Criando..."
    sudo -u postgres psql -d maktubia_points -c "INSERT INTO roles (role_name, role_description, permissions) VALUES ('user', 'Default user role', '{}') ON CONFLICT (role_name) DO NOTHING;"
    ROLE_ID=$(sudo -u postgres psql -d maktubia_points -t -c "SELECT role_id FROM roles WHERE role_name = 'user' LIMIT 1;" | xargs)
fi

echo "📋 Role ID encontrado: $ROLE_ID"
echo ""

# Criar clientes de exemplo
sudo -u postgres psql -d maktubia_points << SQL
-- Criar clientes de exemplo
DO \$\$
DECLARE
    v_user_id INTEGER;
    v_role_id INTEGER := $ROLE_ID;
    v_password_hash TEXT := '$PASSWORD_HASH';
BEGIN
    -- Cliente 1: João Silva
    INSERT INTO users (username, email, password_hash, first_name, last_name, phone, role_id, is_active, created_at, updated_at, user_code)
    VALUES ('joao.silva', 'joao.silva@example.com', v_password_hash, 'João', 'Silva', '+258842000001', v_role_id, TRUE, NOW(), NOW(), '8442000001')
    ON CONFLICT (username) DO NOTHING
    RETURNING user_id INTO v_user_id;
    
    IF v_user_id IS NOT NULL THEN
        INSERT INTO users_profile (user_id, name, phone, email, level)
        VALUES (v_user_id::text, 'João Silva', '+258842000001', 'joao.silva@example.com', 'bronze')
        ON CONFLICT (user_id) DO NOTHING;
        
        INSERT INTO wallets (user_id, balance, points)
        VALUES (v_user_id::text, 0.00, 0)
        ON CONFLICT (user_id) DO NOTHING;
        
        RAISE NOTICE '✅ Cliente João Silva criado (ID: %)', v_user_id;
    END IF;
    
    -- Cliente 2: Maria Santos
    INSERT INTO users (username, email, password_hash, first_name, last_name, phone, role_id, is_active, created_at, updated_at, user_code)
    VALUES ('maria.santos', 'maria.santos@example.com', v_password_hash, 'Maria', 'Santos', '+258842000002', v_role_id, TRUE, NOW(), NOW(), '8442000002')
    ON CONFLICT (username) DO NOTHING
    RETURNING user_id INTO v_user_id;
    
    IF v_user_id IS NOT NULL THEN
        INSERT INTO users_profile (user_id, name, phone, email, level)
        VALUES (v_user_id::text, 'Maria Santos', '+258842000002', 'maria.santos@example.com', 'bronze')
        ON CONFLICT (user_id) DO NOTHING;
        
        INSERT INTO wallets (user_id, balance, points)
        VALUES (v_user_id::text, 0.00, 500)
        ON CONFLICT (user_id) DO NOTHING;
        
        RAISE NOTICE '✅ Cliente Maria Santos criado (ID: %)', v_user_id;
    END IF;
    
    -- Cliente 3: Carlos Oliveira
    INSERT INTO users (username, email, password_hash, first_name, last_name, phone, role_id, is_active, created_at, updated_at, user_code)
    VALUES ('carlos.oliveira', 'carlos.oliveira@example.com', v_password_hash, 'Carlos', 'Oliveira', '+258842000003', v_role_id, TRUE, NOW(), NOW(), '8442000003')
    ON CONFLICT (username) DO NOTHING
    RETURNING user_id INTO v_user_id;
    
    IF v_user_id IS NOT NULL THEN
        INSERT INTO users_profile (user_id, name, phone, email, level)
        VALUES (v_user_id::text, 'Carlos Oliveira', '+258842000003', 'carlos.oliveira@example.com', 'silver')
        ON CONFLICT (user_id) DO NOTHING;
        
        INSERT INTO wallets (user_id, balance, points)
        VALUES (v_user_id::text, 0.00, 1000)
        ON CONFLICT (user_id) DO NOTHING;
        
        RAISE NOTICE '✅ Cliente Carlos Oliveira criado (ID: %)', v_user_id;
    END IF;
    
    -- Cliente 4: Ana Costa
    INSERT INTO users (username, email, password_hash, first_name, last_name, phone, role_id, is_active, created_at, updated_at, user_code)
    VALUES ('ana.costa', 'ana.costa@example.com', v_password_hash, 'Ana', 'Costa', '+258842000004', v_role_id, TRUE, NOW(), NOW(), '8442000004')
    ON CONFLICT (username) DO NOTHING
    RETURNING user_id INTO v_user_id;
    
    IF v_user_id IS NOT NULL THEN
        INSERT INTO users_profile (user_id, name, phone, email, level)
        VALUES (v_user_id::text, 'Ana Costa', '+258842000004', 'ana.costa@example.com', 'gold')
        ON CONFLICT (user_id) DO NOTHING;
        
        INSERT INTO wallets (user_id, balance, points)
        VALUES (v_user_id::text, 0.00, 2500)
        ON CONFLICT (user_id) DO NOTHING;
        
        RAISE NOTICE '✅ Cliente Ana Costa criado (ID: %)', v_user_id;
    END IF;
    
    -- Cliente 5: Pedro Fernandes
    INSERT INTO users (username, email, password_hash, first_name, last_name, phone, role_id, is_active, created_at, updated_at, user_code)
    VALUES ('pedro.fernandes', 'pedro.fernandes@example.com', v_password_hash, 'Pedro', 'Fernandes', '+258842000005', v_role_id, TRUE, NOW(), NOW(), '8442000005')
    ON CONFLICT (username) DO NOTHING
    RETURNING user_id INTO v_user_id;
    
    IF v_user_id IS NOT NULL THEN
        INSERT INTO users_profile (user_id, name, phone, email, level)
        VALUES (v_user_id::text, 'Pedro Fernandes', '+258842000005', 'pedro.fernandes@example.com', 'bronze')
        ON CONFLICT (user_id) DO NOTHING;
        
        INSERT INTO wallets (user_id, balance, points)
        VALUES (v_user_id::text, 0.00, 0)
        ON CONFLICT (user_id) DO NOTHING;
        
        RAISE NOTICE '✅ Cliente Pedro Fernandes criado (ID: %)', v_user_id;
    END IF;
END \$\$;

-- Mostrar clientes criados
SELECT 
    u.user_id,
    u.username,
    u.user_code,
    u.email,
    u.first_name || ' ' || u.last_name as full_name,
    u.phone,
    r.role_name,
    wp.level,
    w.points,
    w.balance
FROM users u
LEFT JOIN roles r ON u.role_id = r.role_id
LEFT JOIN users_profile wp ON u.user_id::text = wp.user_id
LEFT JOIN wallets w ON u.user_id::text = w.user_id
WHERE r.role_name = 'user'
ORDER BY u.created_at DESC
LIMIT 10;
SQL

echo ""
echo "✅ Clientes criados!"
echo ""
echo "📝 Credenciais de login:"
echo "   - Username: joao.silva | Password: 12345678"
echo "   - Username: maria.santos | Password: 12345678"
echo "   - Username: carlos.oliveira | Password: 12345678"
echo "   - Username: ana.costa | Password: 12345678"
echo "   - Username: pedro.fernandes | Password: 12345678"

