class SimRatePlan < ActiveRecord::Base
  require 'rubygems'
  require 'twilio-ruby'
	belongs_to :organisation
  belongs_to :router_inventory
  has_many :purchase_orders 
  has_many :sim_managements
  include PublicActivity::Model

  tracked owner: ->(controller, model) { controller && controller.tracked_current_user },params:
  { :attributes => proc {|controller, model_instance| {"sim_rate_plan(#{model_instance.plan_description})" => model_instance.changes}}},organisation_id: ->(controller, model) { controller && controller.tracked_current_user.organisation_id },:location_network_id => nil

  tracked assumed_by: proc {|controller, model| controller.user_assumed_by if controller}

  def self.get_rate_plans
    uri = URI.parse("https://preview.twilio.com/wireless/RatePlans")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    request = Net::HTTP::Get.new(uri.request_uri)
    request.basic_auth("ACfde9cc4317aab2aa69c98bd92f4e9b68", "0a69b38638642946898f3125c35972e3")
    response = http.request(request)
    res = JSON.parse(response.body)
    result = []
    res["rate_plans"].each do |plan|
      result << [plan["friendly_name"],plan["sid"],plan["data_limit"]]
    end
    result
  end 

  def self.change_plan(sim_sid,rate_plan_sid)
    begin
      client = Twilio::REST::Client.new "ACfde9cc4317aab2aa69c98bd92f4e9b68", "0a69b38638642946898f3125c35972e3"
      resp = client.wireless.sims(sim_sid).update(rate_plan: rate_plan_sid)
      return true
    rescue StandardError => e
      return false
    end
  end

  def self.update_status(item,status)
    begin
      @client = Twilio::REST::Client.new(APPLICATION['defaults']['twilio_sid'], APPLICATION['defaults']['twilio_token'])
      sim = @client.wireless.sims(item.sid).update(callback_method: 'POST',callback_url: 'https://sim-manager.mycompany.com/sim-update-callback/AliceSmithSmartMeter',status: status)
      return sim
    rescue StandardError => e
      return false
    end
  end

  def activate_sim(item, to_update, superSim=false)
    url = superSim ? URI.parse("https://supersim.twilio.com/v1/Sims/#{item.sid}") : URI.parse("https://wireless.twilio.com/v1/Sims/#{item.sid}")
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    http.ssl_version = :TLSv1_2
    request = Net::HTTP::Post.new(url.path)
    request.body = to_update
    request["content-type"] = 'application/x-www-form-urlencoded'
    request.basic_auth(APPLICATION['defaults']['twilio_sid'],APPLICATION['defaults']['twilio_token'])
    request["cache-control"] = 'no-cache'
    response = http.request(request)
    return JSON.parse(response.body)
  end


  
end
