require 'questrade_api/rest/base'

module QuestradeApi
  module REST
    class Option < QuestradeApi::REST::Base
      def initialize(params)
        @raw_body = params[:data]
        build_data(params[:data]) if @raw_body
      end

      def self.fetch(authorization, symbol_id)
        response = super(access_token: authorization.access_token,
                         endpoint: endpoint(symbol_id),
                         url: authorization.url)

        if response.status == 200
          result = OpenStruct.new(options: [])
          result.options = parse_options(response.body)
          response = result
        end

        response
      end

      def self.endpoint(symbol_id)
        "#{BASE_ENDPOINT}/symbol/#{symbol_id}/options"
      end

      def self.parse_options(body)
        raw = JSON.parse(body)

        options = []

        raw['options'].each do |option|
          options << new(data: option)
        end

        options
      end

      private_class_method :parse_options
    end
  end
end