#!/usr/bin/env ruby

require File.expand_path('../../config/environment', __FILE__)

# Check if email argument is provided
if ARGV.empty?
  puts "\e[31mUsage: #{$0} <email_address>\e[0m"
  exit 1
end

email = ARGV[0]

begin
  user = User.find_by!(email: email)

  # Detect database adapter and use appropriate SQL syntax
  adapter = ActiveRecord::Base.connection.adapter_name.downcase
  if adapter == 'postgresql'
    sql = "UPDATE users SET admin = $1 WHERE id = $2"
    params = [true, user.id]
  else
    # SQLite3 and other databases use ? placeholders
    sql = "UPDATE users SET admin = ? WHERE id = ?"
    params = [true, user.id]
  end

  affected_rows = ActiveRecord::Base.connection.exec_update(
    sql,
    "Promote User Admin Status",
    params
  )

  if affected_rows > 0
    puts "\n\e[32mUser successfully promoted!\e[0m"
    puts "\e[32m=========================\e[0m"
    puts "Email: \e[36m#{email}\e[0m"
    puts "\e[32mAdmin access has been granted.\e[0m"
  else
    puts "\n\e[31mError updating user:\e[0m"
    puts "\e[31mNo rows were updated. User may not exist or already be promoted.\e[0m"
    exit 1
  end

rescue ActiveRecord::RecordNotFound
  puts "\n\e[31mError: No user found with email '#{email}'\e[0m"
  exit 1
rescue StandardError => e
  puts "\n\e[31mAn error occurred:\e[0m"
  puts "\e[31m#{e.message}\e[0m"
  exit 1
end
