module Moceansdk

  class Client
    def initialize(obj_auth, options = nil)
      unless obj_auth.is_a? Auth::AbstractAuth
        raise Exceptions::MoceanError, 'auth object must extend AbstractAuth'
      end

      if obj_auth.auth_method.casecmp('basic').zero?
        if Utils.nil_or_empty?(obj_auth.params['mocean-api-key']) || Utils.nil_or_empty?(obj_auth.params['mocean-api-secret'])
          raise Exceptions::RequiredFieldException, "api key and api secret for client object can't be empty"
        end
      else
        raise Exceptions::MoceanError, 'unsupported auth method'
      end

      @transmitter = if options.is_a? Modules::Transmitter
                       options
                     else
                       Modules::Transmitter.new(options)
                     end

      @obj_auth = obj_auth
    end

    def sms
      Modules::Message::Sms.new(@obj_auth, @transmitter)
    end

    def flash_sms
      sms = Modules::Message::Sms.new(@obj_auth, @transmitter)
      sms.mclass = 1
      sms.alt_dcs = 1
      sms
    end

    def pricing
      Modules::Account::Pricing.new(@obj_auth, @transmitter)
    end

    def balance
      Modules::Account::Balance.new(@obj_auth, @transmitter)
    end

    def message_status
      Modules::Message::MessageStatus.new(@obj_auth, @transmitter)
    end

    def verify_request
      Modules::Message::VerifyRequest.new(@obj_auth, @transmitter)
    end

    def verify_validate
      Modules::Message::VerifyValidate.new(@obj_auth, @transmitter)
    end

    def number_lookup
      Modules::NumberLookup::NumberLookup.new(@obj_auth, @transmitter)
    end

    def voice
      Modules::Voice::Voice.new(@obj_auth, @transmitter)
    end

    def command
      Modules::Command::Command.new(@obj_auth, @transmitter)
    end
  end

end
