#!/bin/bash
set -e

cd /home/ines/CarnTrack

echo "🔄 Setup de usuarios para CarnTrack..."
echo ""

# Update roles
echo "1️⃣  Actualizando 'cliente' → 'trader'..."
PGPASSWORD=postgres psql -h localhost -U postgres -d carntrack -c \
  "UPDATE \"user\" SET role = 'trader' WHERE role = 'cliente';" 2>/dev/null
echo "   ✓ Actualizado"
echo ""

# Update default
echo "2️⃣  Actualizando default en tabla 'user'..."
PGPASSWORD=postgres psql -h localhost -U postgres -d carntrack -c \
  "ALTER TABLE \"user\" ALTER COLUMN \"role\" SET DEFAULT 'trader';" 2>/dev/null
echo "   ✓ Actualizado"
echo ""

# Create super user with Node.js
echo "3️⃣  Creando usuario super@carntrack.com..."
node << 'NODEEOF'
const crypto = require("crypto");
const { Pool } = require("pg");

function hashPassword(password) {
  const salt = crypto.randomBytes(16).toString("hex");
  const derivedKey = crypto.scryptSync(password, salt, 64, {
    N: 16384,
    r: 16,
    p: 1,
    maxmem: 67108864,
  });
  return `${salt}:${derivedKey.toString("hex")}`;
}

const pool = new Pool({
  host: "localhost",
  user: "postgres",
  password: "postgres",
  database: "carntrack",
  port: 5432,
});

(async () => {
  const client = await pool.connect();
  try {
    // Check if exists
    const exists = await client.query(
      `SELECT id FROM "user" WHERE email = 'super@carntrack.com'`
    );

    if (exists.rows.length > 0) {
      console.log("   ⚠️  Ya existe");
    } else {
      const hashedPassword = hashPassword("123456");
      const userResult = await client.query(
        `INSERT INTO "user" (id, email, name, role, "emailVerified", "createdAt", "updatedAt")
         VALUES (gen_random_uuid(), 'super@carntrack.com', 'Super Admin', 'super', TRUE, NOW(), NOW())
         RETURNING id`
      );

      const userId = userResult.rows[0].id;

      await client.query(
        `INSERT INTO account (id, "accountId", "providerId", "userId", password)
         VALUES (gen_random_uuid(), $1, 'credential', $2, $3)`,
        [`credential-${userId}`, userId, hashedPassword]
      );

      console.log("   ✓ Creado");
    }
  } catch (e) {
    console.error("   ❌ Error:", e.message);
  } finally {
    client.release();
    await pool.end();
  }
})();
NODEEOF

echo ""
echo "4️⃣  Estado actual:"
PGPASSWORD=postgres psql -h localhost -U postgres -d carntrack -t -c \
  "SELECT role || ': ' || COUNT(*) FROM \"user\" GROUP BY role ORDER BY role;" 2>/dev/null
echo ""
echo "✅ Setup completado!"
