// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.settings;

using fuchsia.intl;

/// Settings related to internationalization such as locale, time zone, and
/// temperature units.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR,
/// FILE_READ_ERROR
[Discoverable]
protocol Intl {
    /// Gets the current [IntlSettings]. Returns immediately on first call;
    /// subsequent calls return when the value changes.
    ///
    /// If this call fails, it is considered a fatal error and the channel
    /// will be closed.
    [Transitional = "Deprecated in favor of Watch"]
    Watch2() -> (IntlSettings settings);

    /// Gets the current [IntlSettings]. Returns immediately on first call;
    /// subsequent calls return when the value changes.
    ///
    /// If this call fails, it is considered a fatal error and the channel
    /// will be closed.
    [Transitional = "Future replacement for Watch2"]
    Watch() -> (IntlSettings settings);

    /// Sets [IntlSettings] settings. Any field not explicitly set in the table performs a
    /// no-op, and will not make any changes.
    Set(IntlSettings settings) -> () error Error;
};

/// Whether if the time format should be using 12 hour or 24 hour clock. H indicates the
/// maximum number that the hour indicator will ever show.
enum HourCycle {
    UNKNOWN = 0;

    /// 12-hour clock, 0:10am after midnight.
    H11 = 1;

    /// 12-hour clock, 12:10am after midnight.
    H12 = 2;

    /// 24-hour clock, 0:10 after midnight.
    H23 = 3;

    /// 24-hour clock, 24:10 after midnight.
    H24 = 4;
};

/// Collection of internationalization-related settings.
table IntlSettings {
    /// An ordered list of preferred locales.
    1: vector<fuchsia.intl.LocaleId>:10 locales;

    /// The preferred temperature unit.
    2: fuchsia.intl.TemperatureUnit temperature_unit;

    /// The currently set time zone.
    3: fuchsia.intl.TimeZoneId time_zone_id;

    /// The preferred hour cycle.
    4: HourCycle hour_cycle;
};
