namespace :openopus do

namespace :core do
  namespace :people do
    desc "Generate one or many random people in your database. Requires 'gem rest-client'. Only for testing!"
    task :generate_people, [:count] => :environment do |task, args|
      def generate_person
        json = ActiveSupport::HashWithIndifferentAccess.new(JSON(RestClient::Request.execute(method: :get, url: 'https://randomuser.me/api?format=json&nat=US').body))
        jp = json[:results][0]
        l = jp[:location]
        a = Address.new
        a.line1 = l[:street].titleize; a.city = l[:city].titleize; a.state = l[:state].titleize;
        a.postal = l[:postcode].to_s.upcase; a.country = "US"
        name = jp[:name]
        p = Person.create(name: "#{name[:title]} #{name[:first]} #{name[:last]}".titleize,
                          phone: jp[:phone], address: a, email: jp[:email],
                          birthdate: jp[:dob][:date], nationality: jp[:nat])
        p.picture = jp[:picture][:medium] if p.respond_to?("picture=".to_sym)
        p.photo = jp[:picture][:medium] if p.respond_to?("photo=".to_sym)
        p
      end

      count = args[:count]
      count ||= 1
      count.to_i.times do
        person = generate_person
        puts("openopus made: #{person.name} of #{person.address.oneline}")
      end
    end

    desc "Generate users from the people in your database that aren't associated with any user. Only for testing!"
    task :generate_users, [:count] => :environment do |task, args|
      def generate_user(person)
        user = User.create(person_id: person.id, status: "generated") if not person.user and not person.email.blank?
        if user and user.respond_to?(:credentials) and user.credentials.blank?
          user.credentials.create(password: "password")
        end
      end

      Rake::Task["openopus:core:people:generate_people"].invoke(args[:count]) if not args[:count].blank?
      Person.all.each { |person| generate_user(person) }
    end
  end
end

end