// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Module Overview: Starboard Time Zone module
//
// Provides access to the system time zone information.

#ifndef STARBOARD_TIME_ZONE_H_
#define STARBOARD_TIME_ZONE_H_

#include "starboard/export.h"
#include "starboard/types.h"

#ifdef __cplusplus
extern "C" {
#endif

// The number of minutes west of the Greenwich Prime Meridian, NOT including
// Daylight Savings Time adjustments.
//
// For example: PST/PDT is 480 minutes (28800 seconds, 8 hours).
typedef int SbTimeZone;

// Gets the system's current SbTimeZone in minutes.
SB_EXPORT SbTimeZone SbTimeZoneGetCurrent();

#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
// Gets the three-letter code of the current timezone in standard time,
// regardless of current Daylight Savings Time status. (e.g. "PST")
#else
// Gets a string representation of the current timezone. Note that the string
// representation can either be standard or daylight saving time. The output
// can be of the form:
//   1) A three-letter abbreviation such as "PST" or "PDT" (preferred).
//   2) A time zone identifier such as "America/Los_Angeles"
//   3) An un-abbreviated name such as "Pacific Standard Time".
#endif
SB_EXPORT const char* SbTimeZoneGetName();

#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
// Gets the three-letter code of the current timezone in Daylight Savings Time,
// regardless of current DST status. (e.g. "PDT")
SB_EXPORT const char* SbTimeZoneGetDstName();
#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // STARBOARD_TIME_ZONE_H_
