import { DataSource } from 'typeorm';
import * as bcrypt from 'bcrypt';
import * as dotenv from 'dotenv';

dotenv.config();

const dataSource = new DataSource({
  type: 'postgres',
  host: process.env.DB_HOST || 'localhost',
  port: parseInt(process.env.DB_PORT || '5432', 10),
  username: process.env.DB_USERNAME || 'postgres',
  password: process.env.DB_PASSWORD || 'postgres',
  database: process.env.DB_DATABASE || 'deployhub',
});

async function seedAdminUser() {
  try {
    await dataSource.initialize();
    console.log('Database connected');

    const email = 'admin@deployhub.com';
    const password = 'Adminadmin@@124';
    const name = 'Admin';

    // Check if admin user already exists
    const existingUser = await dataSource.query(
      'SELECT * FROM users WHERE email = $1',
      [email],
    );

    if (existingUser.length > 0) {
      console.log('Admin user already exists. Updating password...');
      
      const hashedPassword = await bcrypt.hash(password, 10);
      
      await dataSource.query(
        'UPDATE users SET password = $1, role = $2, is_active = $3, name = $4 WHERE email = $5',
        [hashedPassword, 'admin', true, name, email],
      );
      
      console.log('✅ Admin user updated successfully');
      console.log('Email:', email);
      console.log('Password:', password);
    } else {
      console.log('Creating new admin user...');
      
      const hashedPassword = await bcrypt.hash(password, 10);
      
      await dataSource.query(
        'INSERT INTO users (id, email, password, name, role, is_active, created_at) VALUES (gen_random_uuid(), $1, $2, $3, $4, $5, NOW())',
        [email, hashedPassword, name, 'admin', true],
      );
      
      console.log('✅ Admin user created successfully');
      console.log('Email:', email);
      console.log('Password:', password);
    }

    await dataSource.destroy();
    console.log('Done!');
  } catch (error) {
    console.error('Error seeding admin user:', error);
    process.exit(1);
  }
}

seedAdminUser();
