/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */

package monitoring.web.controls;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.model.SelectItem;

import org.apache.myfaces.trinidad.component.UIXSwitcher;
import org.apache.myfaces.trinidad.component.core.CorePoll;

import shared.ResourceUtils;

/**
 * Contains all the controls that are shared in the sample. 
 */
public class SharedControls {

  //Shared controls
  private static List<String> MAIN_VIEW_SWITCHER_FACET_NAMES;
  private static String MAIN_VIEW_SWITCHER_DEFAULT_FACET;

  private static String FIVE_SECONDS_RATE_ID = "5";   
  private static String TEN_SECONDS_RATE_ID = "10";   
  private static String THIRTY_SECONDS_RATE_ID = "30";   
  private static String SIXTY_SECONDS_RATE_ID = "60";   

  //In Milliseconds
  private static int DEFAULT_ALARM_GENERATION_RATE = 10 * 1000;   
  private static int DEFAULT_MAX_NUMBER_OF_ALARMS = 20;   
  //In Milliseconds
  private static int DEFAULT_AUTO_REFRESH_RATE = 10 * 1000;   

  private static int DEFAULT_MAIN_VIEW_WIDTH = 600;
  private static int DEFAULT_MAIN_VIEW_HEIGHT = 375;
  private static int DEFAULT_VIEW_TILE_SIZE = 150;
  
  private static int DEFAULT_OVERVIEW_WIDTH = 100;
  private static int DEFAULT_OVERVIEW_HEIGHT = 50;

  private static boolean DEFAULT_OVERVIEW_AUTO_REFRESH = true;

  private UIXSwitcher mainViewSwitcher;
  private List<SelectItem> autoRefreshAvailableRates;
  private List<SelectItem> alarmGenerationAvailableRates;
  private int autoRefreshRate;
  private int alarmGenerationRate;
  private int maxNumberOfAlarms;
  private CorePoll autoRefreshRatePoll;

  static {

    ////////////////////////////////////////////////////////////////////////////
    //This needs to be in synch with the JSP page: /main-area/index.jsp
    ////////////////////////////////////////////////////////////////////////////
    String[] facetNames = new String[]{"networkNetworkViewFacet",
        "inventoryEquipmentViewFacet", "serviceNetworkViewFacet"};

    //Save it
    MAIN_VIEW_SWITCHER_FACET_NAMES = Arrays.asList(facetNames);

    //Define the default facet name 
    MAIN_VIEW_SWITCHER_DEFAULT_FACET = MAIN_VIEW_SWITCHER_FACET_NAMES.get(0);
  }

  //////////////////////////////////////////////////////////////////////////////
  //Initialization
  //////////////////////////////////////////////////////////////////////////////
  /**
   * Initializes the shared controls.
   */
  public void initialize() {

    ////////////////////////////////////
    //Initialize auto refresh rates
    autoRefreshAvailableRates = new ArrayList<SelectItem>(4);

    autoRefreshAvailableRates.add(new SelectItem(
        TEN_SECONDS_RATE_ID, ResourceUtils.getString("labelTenSeconds")));

    autoRefreshAvailableRates.add(new SelectItem(
        THIRTY_SECONDS_RATE_ID, ResourceUtils.getString("labelThirtySeconds")));

    autoRefreshAvailableRates.add(new SelectItem(
        SIXTY_SECONDS_RATE_ID, ResourceUtils.getString("labelSixtySeconds")));

    ////////////////////////////////////
    //Initialize alarm generation rates
    alarmGenerationAvailableRates = new ArrayList<SelectItem>(4);

    alarmGenerationAvailableRates.add(new SelectItem(
        FIVE_SECONDS_RATE_ID, ResourceUtils.getString("labelFiveSeconds")));

    alarmGenerationAvailableRates.add(new SelectItem(
        TEN_SECONDS_RATE_ID, ResourceUtils.getString("labelTenSeconds")));

    alarmGenerationAvailableRates.add(new SelectItem(
        THIRTY_SECONDS_RATE_ID, ResourceUtils.getString("labelThirtySeconds")));

    alarmGenerationAvailableRates.add(new SelectItem(
        SIXTY_SECONDS_RATE_ID, ResourceUtils.getString("labelSixtySeconds")));

    ////////////////////////////////////
    //Initialize auto refresh rate
    setAutoRefreshRate(DEFAULT_AUTO_REFRESH_RATE);

    ////////////////////////////////////
    //Initialize alarm generation rate 
    setAlarmGenerationRate(DEFAULT_ALARM_GENERATION_RATE);
    
    ////////////////////////////////////
    //Initialize max number of alarms 
    setMaxNumberOfAlarms(DEFAULT_MAX_NUMBER_OF_ALARMS);    

  }

  //////////////////////////////////////////////////////////////////////////////
  //Accessors and Modifiers
  //////////////////////////////////////////////////////////////////////////////

  public UIXSwitcher getMainViewSwitcher() {
    return mainViewSwitcher;
  }
  public void setMainViewSwitcher(UIXSwitcher mainViewSwitcher) {
    this.mainViewSwitcher = mainViewSwitcher;
  }
  public String getMainViewSwitcherDefaultFacet() {
    return MAIN_VIEW_SWITCHER_DEFAULT_FACET;
  }
  public List<String> getMainViewSwitcherFacetNames() {
    return MAIN_VIEW_SWITCHER_FACET_NAMES;
  }
  public String getMainViewSwitcherFacetName(int index) {
    return MAIN_VIEW_SWITCHER_FACET_NAMES.get(index);
  }
  public List<SelectItem> getAutoRefreshAvailableRates() {
    return autoRefreshAvailableRates;
  }
  public void setAutoRefreshRates(List<SelectItem> autoRefreshRates) {
    this.autoRefreshAvailableRates = autoRefreshRates;
  }
  public List<SelectItem> getAlarmGenerationAvailableRates() {
    return alarmGenerationAvailableRates;
  }
  public void setAlarmGenerationRates(List<SelectItem> alarmGenerationRates) {
    this.alarmGenerationAvailableRates = alarmGenerationRates;
  } 
  /**
   * Returns the refresh rate in milliseconds.
   */
  public int getAutoRefreshRate() {
    return autoRefreshRate;
  }
  public void setAutoRefreshRate(int autoRefreshRate) {
    this.autoRefreshRate = autoRefreshRate;
  }
  public int getAlarmGenerationRate() {
    return alarmGenerationRate;
  }
  public void setAlarmGenerationRate(int alarmGenerationRate) {
    this.alarmGenerationRate = alarmGenerationRate;
  }
  public int getMaxNumberOfAlarms() {
    return maxNumberOfAlarms;
  }
  public void setMaxNumberOfAlarms(int maxNumberOfAlarms) {
    this.maxNumberOfAlarms = maxNumberOfAlarms;
  }
  public String getCurrentAlarmGenerationRate() {
    return getAlarmGenerationRate() + "";          
  }
  public CorePoll getAutoRefreshRatePoll() {
    return autoRefreshRatePoll;
  }
  public void setAutoRefreshRatePoll(CorePoll autoRefreshRatePoll) {
    this.autoRefreshRatePoll = autoRefreshRatePoll;
  }
  public int getMainViewHeight() {
    return DEFAULT_MAIN_VIEW_HEIGHT;
  }
  public int getMainViewWidth() {
    return DEFAULT_MAIN_VIEW_WIDTH;
  }
  public int getViewTileSize() {
    return DEFAULT_VIEW_TILE_SIZE;
  }
  public int getOverviewHeight() {
    return DEFAULT_OVERVIEW_HEIGHT;
  }
  public int getOverviewWidth() {
    return DEFAULT_OVERVIEW_WIDTH;
  }
  public boolean isOverviewAutoRefresh() {
    return DEFAULT_OVERVIEW_AUTO_REFRESH;
  }

}