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

#ifndef CONTENT_RENDERER_DATE_TIME_FORMATTER_H_
#define CONTENT_RENDERER_DATE_TIME_FORMATTER_H_

#include <string>

#include "base/basictypes.h"
#include "content/common/content_export.h"
#include "third_party/icu/source/common/unicode/unistr.h"
#include "third_party/icu/source/i18n/unicode/gregocal.h"
#include "ui/base/ime/text_input_type.h"

namespace WebKit {
struct WebDateTimeChooserParams;
}  // namespace WebKit

namespace content {

// Converts between a text string representing a date/time and
// a set of year/month/day/hour/minute/second and vice versa.
// It is timezone agnostic.
class CONTENT_EXPORT DateTimeFormatter {
 public:
  explicit DateTimeFormatter(const WebKit::WebDateTimeChooserParams& source);
  DateTimeFormatter(
      ui::TextInputType type,
      int year, int month, int day, int hour, int minute, int second,
      int week_year, int week);
  ~DateTimeFormatter();

  int GetYear() const;
  int GetMonth() const;
  int GetDay() const;
  int GetHour() const;
  int GetMinute() const;
  int GetSecond() const;
  int GetWeekYear() const;
  int GetWeek() const;
  ui::TextInputType GetType() const;
  const std::string& GetFormattedValue() const;

 private:
  void CreatePatternMap();
  bool ParseValues();
  const std::string FormatString() const;
  int ExtractValue(
      const icu::Calendar* calendar, UCalendarDateFields value) const;
  void ExtractType(const WebKit::WebDateTimeChooserParams& source);
  void ClearAll();

  ui::TextInputType type_;
  icu::UnicodeString patterns_[ui::TEXT_INPUT_TYPE_MAX + 1];
  int year_;
  int month_;
  int day_;
  int hour_;
  int minute_;
  int second_;
  int week_year_;
  int week_;
  const icu::UnicodeString* pattern_;
  std::string formatted_string_;

  DISALLOW_COPY_AND_ASSIGN(DateTimeFormatter);
};

}  // namespace content

#endif  // CONTENT_RENDERER_DATE_TIME_FORMATTER_H_
