module Youtube
  class OauthExchange
    TOKEN_URL = "https://oauth2.googleapis.com/token".freeze

    def self.call(code)
      response = Faraday.post(TOKEN_URL, {
        code: code,
        client_id: ENV["YOUTUBE_CLIENT_ID"],
        client_secret: ENV["YOUTUBE_CLIENT_SECRET"],
        redirect_uri: ENV["YOUTUBE_REDIRECT_URI"],
        grant_type: "authorization_code"
      })
      data = JSON.parse(response.body)
      raise BroadcastService::Error, data["error_description"] if data["error"]

      {
        access_token: data["access_token"],
        refresh_token: data["refresh_token"],
        expires_in: data["expires_in"].to_i,
        channel_id: nil,
        channel_title: nil
      }
    end
  end
end
