module Api
  module V1
    class UsersController < ApplicationController
      skip_before_action :verify_authenticity_token

      def index
        if params[:device_id].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required device_id param." } and return
        end
        if Device.where(:device_id => params[:device_id]).first.nil?
          render :json => {:code => 404, :status => "Failed", :message => "Not found device with device id #{params[:device_id]}." } and return
        end
        @users = User.where(:device_id => params[:device_id]).order("username")
      end

      def login
        if params[:email].blank? || params[:password].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required email and password params." }
          return
        end
        user = User.where(:email => params[:email]).first
        if user
          if user.valid_password?(params[:password])
            if user.device_id == "000000"
              render :json => {:code => 201, :status => "Success", :device => "000000" } and return
            else
              device = Device.where(:device_id => user.device_id).first
              if device
                render :json => {:code => 200, :status => "Success", :device => device.device_id } and return
              else
                render :json => {:code => 202, :status => "Success", :device => "" } and return
              end
            end
          else
            render :json => {:code => 403, :status => "Failed", :message => "Authenticate failed" } and return
          end
        else
          render :json => {:code => 403, :status => "Failed", :message => "Authenticate failed" } and return
        end
      end

      def create
        if params[:username].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required username param." } and return
        end
        if params[:gender].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required gender param." } and return
        end
        if params[:birthday].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required birthday param." } and return
        end
        if params[:device_id].blank?
          render :json => {:code => 404, :status => "Failed", :message => "Required device_id param." } and return
        end
        user = User.new
        user.username = params[:username] # required
        user.email = Devise.friendly_token.first(8) + "@example.com"
        #user.true_name = params[:true_name]
        user.gender = params[:gender] # required
        user.birthday = params[:birthday]  # required
        user.device_id = params[:device_id] # required
        user.mobile = params[:mobile]
        generated_password = Devise.friendly_token.first(8)
        user.password = generated_password
        user.password_confirmation = generated_password
        if user.save
          device = Device.where("device_id" => params[:device_id]).first
          if device
            device.owner_name = user.username
            #device.save
          end
          #RegistrationMailer.welcome(user, generated_password).deliver
          render :json => {:code => 200, :status => "Success", :message => "User created." } and return
        else
          render :json => {:code => 400, :status => "Failed to register ", :message => user.errors.full_messages.join(", ") } and return
        end
      end

    end
  end
end