// 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.

import 'dart:async';

import 'package:fidl_fuchsia_ui_remotewidgets/fidl_async.dart';
import 'package:intl/intl.dart';
import 'package:internationalization/strings.dart';
import 'package:quickui/quickui.dart';

/// Defines a [UiSpec] for displaying date and time.
class Datetime extends UiSpec {
  // Localized strings.
  static String get _title => Strings.dateTime;
  static const Duration refreshDuration = Duration(seconds: 1);

  // Action to change timezone.
  static int changeAction = QuickAction.details.$value;

  Timer _timer;

  Datetime() {
    _timer = Timer.periodic(refreshDuration, (_) => _onChange());
    _onChange();
  }

  void _onChange() async {
    spec = _specForDateTime();
  }

  @override
  void update(Value value) async {}

  @override
  void dispose() {
    _timer?.cancel();
  }

  static Spec _specForDateTime([int action = 0]) {
    String dateTime = DateFormat().add_E().add_jm().format(DateTime.now());
    return Spec(title: _title, groups: [
      Group(title: _title, values: [Value.withText(TextValue(text: dateTime))]),
    ]);
  }
}
