# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from telemetry.page import cache_temperature as cache_temperature_module
from telemetry.page import traffic_setting as traffic_setting_module
from telemetry.page import page as page_module
from telemetry.page import shared_page_state
from telemetry import story


class CTPage(page_module.Page):
  def __init__(
    self,
    url,
    page_set,
    shared_page_state_class,
    archive_data_file,
    traffic_setting,
    run_page_interaction_callback,
    run_navigate_steps_callback,
    cache_temperature,
  ):
    super(CTPage, self).__init__(
      url=url,
      page_set=page_set,
      shared_page_state_class=shared_page_state_class,
      traffic_setting=traffic_setting,
      cache_temperature=cache_temperature,
      grouping_keys={'temperature': cache_temperature},
      name=url,
    )
    self.archive_data_file = archive_data_file
    self._run_navigate_steps_callback = run_navigate_steps_callback
    self._run_page_interaction_callback = run_page_interaction_callback

  def RunNavigateSteps(self, action_runner):
    if self._run_navigate_steps_callback:
      self._run_navigate_steps_callback(self, action_runner)
    else:
      action_runner.Navigate(self.url)

  def RunPageInteractions(self, action_runner):
    if self._run_page_interaction_callback:
      self._run_page_interaction_callback(action_runner)


class CTPageSet(story.StorySet):
  """Page set used by CT Benchmarks."""

  def __init__(
    self,
    urls_list,
    user_agent,
    archive_data_file,
    traffic_setting=traffic_setting_module.NONE,
    run_page_interaction_callback=None,
    run_navigate_steps_callback=None,
    cache_temperature=cache_temperature_module.ANY,
  ):
    if user_agent == 'mobile':
      shared_page_state_class = shared_page_state.SharedMobilePageState
    elif user_agent == 'desktop':
      shared_page_state_class = shared_page_state.SharedDesktopPageState
    else:
      raise ValueError('user_agent %s is unrecognized' % user_agent)

    super(CTPageSet, self).__init__(archive_data_file=archive_data_file)

    for url in urls_list.split(','):
      self.AddStory(
        CTPage(
          url,
          self,
          shared_page_state_class=shared_page_state_class,
          archive_data_file=archive_data_file,
          traffic_setting=traffic_setting,
          run_page_interaction_callback=run_page_interaction_callback,
          run_navigate_steps_callback=run_navigate_steps_callback,
          cache_temperature=cache_temperature,
        )
      )
