# Namespace Guts tasks namespace :guts do

# Namespace Guts User tasks
namespace :user do
  desc 'Create a user'
  task :create, [:name, :email, :password] => :environment do |_, args|
    if args.to_hash.size < 3
      raise ArgumentError, '[Guts] Please enter name, email, and a password'
    end

    user                       = Guts::User.new
    user.name                  = args[:name]
    user.password              = args[:password]
    user.password_confirmation = args[:password]
    user.email                 = args[:email]
    user.save!

    puts '[Guts] User created'
  end

  desc 'Delete a user'
  task :delete, [:email] => :environment do |_, args|
    raise ArgumentError, '[Guts] Please enter an email' if args.to_hash.empty?

    user = Guts::User.find_by(email: args[:email])
    raise StandardError, '[Guts] User not found' unless user

    user.destroy!

    puts '[Guts] User destroyed'
  end

  desc 'New password for a user'
  task :new_password, [:email, :password] => :environment do |_, args|
    if args.to_hash.size < 2
      raise ArgumentError, '[Guts] Please enter a password and an email'
    end

    user = Guts::User.find_by(email: args[:email])
    raise StandardError, '[Guts] User not found' unless user

    user.password              = args[:password]
    user.password_confirmation = args[:password]
    user.save!

    puts '[Guts] New password for user has been set'
  end

  desc 'Sets user as the main master for the admin panel'
  task :set_master, [:email] => :environment do |_, args|
    if args.to_hash.empty?
      raise ArgumentError, '[Guts] Please enter an email'
    end

    user = Guts::User.find_by(email: args[:email])
    raise StandardError, '[Guts] User not found' if user.nil?

    admin_group = Guts::Group.find_by(slug: 'admins')
    raise StandardError, '[Guts] Missing "Admins" group' if admin_group.nil?

    user.groups << admin_group
    user.save!

    puts '[Guts] User is now authorized for everything'
  end
end

end