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

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef FXJS_FX_DATE_HELPERS_H_
#define FXJS_FX_DATE_HELPERS_H_

#include <stddef.h>

#include "core/fxcrt/widestring.h"

namespace fxjs {

enum class ConversionStatus { kSuccess = 0, kBadFormat, kBadDate };

extern const wchar_t* const kMonths[12];
extern const wchar_t* const kFullMonths[12];

double FX_GetDateTime();
int FX_GetYearFromTime(double dt);
int FX_GetMonthFromTime(double dt);
int FX_GetDayFromTime(double dt);
int FX_GetHourFromTime(double dt);
int FX_GetMinFromTime(double dt);
int FX_GetSecFromTime(double dt);
bool FX_IsValidMonth(int m);
bool FX_IsValidDay(int d);
bool FX_IsValid24Hour(int h);
bool FX_IsValidMinute(int m);
bool FX_IsValidSecond(int s);
double FX_LocalTime(double d);
double FX_MakeDay(int nYear, int nMonth, int nDay);
double FX_MakeTime(int nHour, int nMin, int nSec, int nMs);
double FX_MakeDate(double day, double time);

int FX_ParseStringInteger(const WideString& str,
                          size_t nStart,
                          size_t* pSkip,
                          size_t nMaxStep);

ConversionStatus FX_ParseDateUsingFormat(const WideString& value,
                                         const WideString& format,
                                         double* result);

}  // namespace fxjs

using fxjs::FX_GetDateTime;
using fxjs::FX_GetDayFromTime;
using fxjs::FX_GetHourFromTime;
using fxjs::FX_GetMinFromTime;
using fxjs::FX_GetMonthFromTime;
using fxjs::FX_GetSecFromTime;
using fxjs::FX_GetYearFromTime;
using fxjs::FX_IsValid24Hour;
using fxjs::FX_IsValidDay;
using fxjs::FX_IsValidMinute;
using fxjs::FX_IsValidMonth;
using fxjs::FX_IsValidSecond;
using fxjs::FX_LocalTime;
using fxjs::FX_MakeDate;
using fxjs::FX_MakeDay;
using fxjs::FX_MakeTime;
using fxjs::FX_ParseDateUsingFormat;
using fxjs::FX_ParseStringInteger;

#endif  // FXJS_FX_DATE_HELPERS_H_
