class Meraki::Wireless::ObjectMapper < Meraki::BaseApi

  def self.vlan ssid
        ssid_vlan = ssid.v_lan
        return ssid_vlan.v_lan_id.to_i if ssid_vlan.present? && ssid_vlan.v_lan_id.to_i > 0
        return 0
  end


  def self.ssid_security_mode ssid_object
    return {} if ssid_object.security_mode.blank?
    return {"authMode" => "open"} if "none" == ssid_object.security_mode
    return {"authMode" => "psk", "encryptionMode"=> "wpa" ,"psk"=> ssid_object.wpa_key} if "psk2" == ssid_object.security_mode
    return {"authMode" => "8021x-radius", "wpaEncryptionMode"=> "WPA2 only"} if "wpa2" == ssid_object.security_mode
    return {"authMode" => "8021x-radius","wpaEncryptionMode"=> "WPA3 Transition Mode"} if "wpa3" == ssid_object.security_mode
    return {}
  end

  def self.get_ssid_band_information radio
    radiomap = {"2.4"=>"2.4 GHz band only","5"=> "5 GHz band only", "6"=>"6 GHz band only","both" =>  "Dual band operation"}
    radiohash = {}
    if radio.present?
      radiovalue = radiomap[radio]
      radiohash = { "bandSelection" => radiovalue } unless radiovalue.blank?
    end

    return radiohash
  end

  def self.get_ssid_params ssid_object
    hsh = {
      "name" => ssid_object.ssid_name, 
      "enabled" => ssid_object.is_enabled,
      "visible" => !ssid_object.is_hidden
    }
    hsh = hsh.merge(self.get_ssid_band_information(ssid_object.radio_band))
    hsh = hsh.merge(self.ssid_security_mode(ssid_object))
    hsh["ipAssignmentMode"] = ssid_object.ssid_mode == "1" ? "NAT mode" : "Bridge mode"
    hsh["defaultVlanId"] =  self.vlan(ssid_object) if self.vlan(ssid_object) != 0 if ssid_object.ssid_mode == "0"

    #hsh["walledGardenEnabled"] = ssid_object.wallgarden == "1" ? "true" : "false"
    #hsh["walledGardenRanges"] = walled_garden_range if ssid_object.walled_garden_range.present?

    hsh
  end

  def self.get_radio_profile_params radio_object
    hash = {}
    hash[:name] = radio_object.name
    hash[:minBitrateType] = "band"
    hash[:bandSelectionType] = "ap"
    hash = hash.merge(get_radio_settings_params(radio_object))
    return hash
  end

  def self.get_radio_settings_params radio_object
    hash = {}
    h3 = {}
    radio_manage = radio_object.radio_management
    hash[:clientBalancingEnabled] = radio_manage.client_steering
    hash[:apBandSettings] = h3
    h3[:bandSteeringEnabled] = radio_manage.assoc_steering
    s = radio_object.radio_settings
    if ((s[0][:band] == "2.4" && s[0][:is_disable] == false) && (s[1][:band] == "5" && s[1][:is_disable] == false))
      h3[:bandOperationMode] = "dual"
    elsif (s[0][:band] == "2.4" && s[0][:is_disable] == false)
      h3[:bandOperationMode] = "2.4ghz"
    elsif s[1][:band] == "5" && s[1][:is_disable] == false
      h3[:bandOperationMode] = "5ghz"
    end
    s.each do |rs|
      h1 = {}
      h2 = {}
      if rs.band == "2.4"
        hash[:twoFourhzSettings] = h1
      elsif rs.band == "5"
        hash[:fiveGhzSettings] = h1
      end
      h1[:maxPower] = rs.power
      h1[:minPower] = rs.power
      h1[:channelWidth] = rs.bandwidth
      h1[:validAutoChannels] = [1, 6, 11]
    end
    hash
  end
  
end
