module Api
  module V1
    class ReportsController < ApplicationController
      skip_before_action :verify_authenticity_token

      # GET /api/v1/report
      def show
        mac = params[:mac].to_s.strip
        uid = params[:uid].to_s.strip
        if mac.nil? && uid.nil?
          render :plain => "error:require mac, uid params." and return
        end
        if uid.blank?
          hardware = Hardware.where(:mac => mac).first
        else
          hardware = Hardware.where(:uid => uid).first
        end
        if hardware
            render :plain => "registered:#{hardware.sn}" and return
        else
            render :plain => "unregistered" and return
        end
      end

      # POST /api/v1/reports
      def create
      	mac = params[:mac].to_s.strip
        uid = params[:uid].to_s.strip
        sn = params[:sn].to_s.strip
      	cpu = params[:cpu].to_s.strip
        model_name = params[:model].to_s.strip
        os_name = params[:os].to_s.strip
        oskernal = params[:kernel].to_s.strip
        raminfo = params[:raminfo].to_s.strip
        emmc = params[:emmc].to_s.strip

        if cpu.blank?
          render :plain => "failed:Missing cpu info" and return
        end
      	if mac.blank? && sn.blank?
      		render :plain => "failed:Missing required params" and return
      	end
        if uid.blank? || uid == '0'
      	  hardware = Hardware.where(:mac => mac).first
        else
          hardware = Hardware.where(:uid => uid).first
        end
      	if hardware.present?
          if hardware.sn != sn && sn.present?
            hardware.hardware_test_logs.build(sn: sn, mac: hardware.mac, ip: request.remote_ip, log: Base64.decode64(params[:log].to_s))
            hardware.sn = sn
            hardware.emmc = emmc
            hardware.test_count ||= 1
            hardware.test_count = hardware.test_count + 1
            hardware.sn_changed_count ||= 0
            hardware.sn_changed_count = hardware.sn_changed_count + 1
            hardware.save
            render :plain => "sn:#{sn}:registered" and return
            # render :plain => "sn:#{hardware.sn}:sn_hacked" and return
          else
            hardware.hardware_test_logs.build(sn: hardware.sn, mac: hardware.mac, ip: request.remote_ip, log: Base64.decode64(params[:log].to_s))
            hardware.emmc = emmc
            hardware.test_count ||= 1
            hardware.test_count = hardware.test_count + 1
            hardware.save
            render :plain => "sn:#{hardware.sn}:registered" and return
          end
      	end
      	hardware = Hardware.new
      	hardware.sn = sn
      	hardware.mac = mac
        hardware.uid = uid
      	hardware.cpu = cpu
        hardware.modelname = model_name
        hardware.os = os_name
        hardware.oskernal = oskernal
        hardware.raminfo = raminfo
        hardware.emmc = emmc
        hardware.test_count = 1
        hardware.hardware_test_logs.build(sn: sn, mac: mac, ip: request.remote_ip, log: Base64.decode64(params[:log].to_s))
      	if hardware.save
			    render :plain => "sn:#{hardware.sn}:created" and return
      	else
      		render :plain => "failed:#{hardware.errors.full_messages.join(";")}" and return
      	end
      end

  	end
  end
end
