class Support::Sites::Schools::Twilio::LookupsController < Support::Sites::Controller
  def profile
    data = twilio_service(__method__)
    render_success :ok, json: data.map { |d| profile_props(d) }
  end

  def brands
    data = twilio_service(__method__)
    render_success :ok, json: data.map { |d| brand_props(d) }
  end

  def messaging_services
    data = twilio_service(__method__)
    render_success :ok, json: data.map { |d| message_service_props(d) }
  end

  def campaigns
    data = twilio_service(__method__, params)
    render_success :ok, json: data.map { |d| campaign_props(d) }
  end

  def phone_numbers
    data = twilio_service(__method__, params)
    render_success :ok, json: data.map { |d| phone_props(d) }
  end

  def toll_free_verifications
    data = twilio_service(__method__, params)
    render_success :ok, json: data.map { |d| toll_free_props(d) }
  end

  def twiml
    data = twilio_service(__method__, params)
    render_success :ok, json: data.map { |d| twiml_props(d) }
  end

  private
    def school
      @school ||= School.find_by(id: params[:school_id])
    end

    def twilio_service(action, params={})
      Twilio::LookupService.call(school, action, params)
    end

    def common_props(object)
      {
        sid: object.sid,
        friendly_name: object.friendly_name,
        status_callback: object.status_callback,
        date_created: object.date_created,
        date_updated: object.date_created
      }
    end

    def profile_props(object)
      {
        account_sid: object.account_sid,
        policy_sid: object.policy_sid,
        email: object.email,
        valid_until: object.valid_until,
        url: object.url,
        links: object.links,
        status: object.status
      }.merge(common_props(object))
    end

    def message_service_props(object)
      {
        inbound_request_url: object.inbound_request_url,
        fallback_url: object.fallback_url,
        us_app_to_person_registered: object.us_app_to_person_registered,
        sticky_sender: object.sticky_sender,
        usecase: object.usecase,
        area_code_geomatch: object.area_code_geomatch,
        smart_encoding: object.smart_encoding
      }.merge(common_props(object))
    end

    def campaign_props(object)
      {
        sid: object.sid,
        date_created: object.date_created,
        date_updated: object.date_created,
        brand_registration_sid: object.brand_registration_sid,
        messaging_service_sid: object.messaging_service_sid,
        description: object.description,
        message_samples: object.message_samples,
        us_app_to_person_usecase: object.us_app_to_person_usecase,
        has_embedded_links: object.has_embedded_links,
        has_embedded_phone: object.has_embedded_phone,
        campaign_status: object.campaign_status,
        campaign_id: object.campaign_id,
        is_externally_registered: object.is_externally_registered,
        rate_limits: object.rate_limits,
        message_flow: object.message_flow,
        opt_in_message: object.opt_in_message,
        opt_out_message: object.opt_out_message,
        help_message: object.help_message,
        opt_in_keywords: object.opt_in_keywords,
        opt_out_keywords: object.opt_out_keywords,
        help_keywords: object.help_keywords,
        url: object.url,
        mock: object.mock,
        errors: object.errors
      }
    end

    def brand_props(object)
      {
        sid: object.sid,
        date_created: object.date_created,
        date_updated: object.date_created,
        account_sid: object.account_sid,
        customer_profile_bundle_sid: object.customer_profile_bundle_sid,
        a2p_profile_bundle_sid: object.a2p_profile_bundle_sid,
        brand_type: object.brand_type,
        status: object.status,
        tcr_id: object.tcr_id,
        failure_reason: object.failure_reason,
        url: object.url,
        brand_score: object.brand_score,
        brand_feedback: object.brand_feedback,
        identity_status: object.identity_status,
        russell_3000: object.russell_3000,
        government_entity: object.government_entity,
        tax_exempt_status: object.tax_exempt_status,
        skip_automatic_sec_vet: object.skip_automatic_sec_vet,
        mock: object.mock,
        links: object.links
      }
    end

    def phone_props(object)
      {
        sid: object.sid,
        status: object.status,
        voice_url: object.voice_url,
        phone_number: object.phone_number,
        friendly_name: object.friendly_name,
        date_created: object.date_created,
        status_callback: object.status_callback
      }
    end

    def toll_free_props(object)
      {
        date_updated: object.date_updated,
        message_volume: object.message_volume,
        production_message_sample: object.production_message_sample,
        use_case_summary: object.use_case_summary,
        status: object.status,
        error_code: object.error_code,
        use_case_categories: object.use_case_categories,
        date_created: object.date_created,
        rejection_reason: object.rejection_reason,
        tollfree_phone_number_sid: object.tollfree_phone_number_sid
      }
    end

    def twiml_props(object)
      {
        sms_status_callback: object.sms_status_callback,
        voice_caller_id_lookup: object.voice_caller_id_lookup,
        voice_fallback_url: object.voice_fallback_url,
        date_updated: object.date_updated,
        friendly_name: object.friendly_name,
        sms_fallback_url: object.sms_fallback_url,
        account_sid: object.account_sid,
        voice_url: object.voice_url,
        sid: object.sid,
        date_created: object.date_created,
        sms_url: object.sms_url,
        status_callback: object.status_callback,
        message_status_callback: object.message_status_callback
      }
    end
end
