use crate::time::constants_utils::YearFlags;
pub const COMMON_TIMESTAMP_FORMATS: [&str; 16] = [
"yyyy-mm-ddThh:ii:ssz",
"yyyy-M-ddThh:ii:ssz",
"yyyy-mm-ddThh:ii:ss.fz",
"yyyy-M-ddThh:ii:ss.fz",
"dd/mm/yyyy:hh:ii:ss z",
"yyyymmddThhiissz",
"yyyymmddThhiissfz",
"yyyymmddhhiissz",
"yyyymmddhhiissfz",
"yyyymmddhhiiss",
"dd mm yyyy hh:ii:ss GMT",
"dd-mm-yyyy hh:ii:ss GMT",
"yyyy-mm-dd hh:ii:ss.f",
"yyyy-mm-dd hh:ii:ss",
"dd mm yyyy hh:ii:ss",
"mm dd yyyy hh:ii:ss",
];
pub const EPOCH: i32 = 1970;
pub const NANOS_PER_YEAR: u64 = 31_536_000_000_000_000;
pub const NANOS_PER_LEAP_YEAR: u64 = 31_622_400_000_000_000;
pub const NANOS_PER_DAY: u64 = 86_400_000_000_000;
pub const NANOS_PER_MONTH: u64 = 2_592_000_000_000_000;
pub const NANOS_PER_LEAP_MONTH: u64 = 2_678_400_000_000_000;
pub const NANOS_PER_HOUR: u64 = 3_600_000_000_000;
pub const NANOS_PER_MINUTE: u64 = 60_000_000_000;
pub const NANOS_PER_SEC: u32 = 1_000_000_000;
pub const NANOS_PER_MILLI: u32 = 1_000_000;
pub const NANOS_PER_MICRO: u32 = 1_000;
pub const MILLIS_PER_SEC: u32 = 1_000;
pub const SECS_PER_YEAR: u32 = 31536000;
pub const SECS_PER_LEAP_YEAR: u32 = 31622400;
pub const SECS_PER_MONTH: u32 = 2_592_000;
pub const SECS_PER_DAY: u32 = 86_400;
pub const SECS_PER_HOUR: u32 = 3_600;
pub const SECS_PER_MINUTE: u32 = 60;
pub(super) const YEAR_STARTS_AFTER_MONDAY: u8 = 7; pub(super) const YEAR_STARTS_AFTER_TUESDAY: u8 = 1;
pub(super) const YEAR_STARTS_AFTER_WEDNESDAY: u8 = 2;
pub(super) const YEAR_STARTS_AFTER_THURSDAY: u8 = 3;
pub(super) const YEAR_STARTS_AFTER_FRIDAY: u8 = 4;
pub(super) const YEAR_STARTS_AFTER_SATURDAY: u8 = 5;
pub(super) const YEAR_STARTS_AFTER_SUNDAY: u8 = 6;
pub(super) const COMMON_YEAR: u8 = 1 << 3;
pub(super) const LEAP_YEAR: u8 = 0 << 3;
pub(super) const NSU: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_SUNDAY);
pub(super) const NSA: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_SATURDAY);
pub(super) const NFR: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_FRIDAY);
pub(super) const NTH: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_THURSDAY);
pub(super) const NWE: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_WEDNESDAY);
pub(super) const NTU: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_TUESDAY);
pub(super) const NMO: YearFlags = YearFlags(COMMON_YEAR | YEAR_STARTS_AFTER_MONDAY);
pub(super) const LSU: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_SUNDAY);
pub(super) const LSA: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_SATURDAY);
pub(super) const LFR: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_FRIDAY);
pub(super) const LTH: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_THURSDAY);
pub(super) const LWE: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_WEDNESDAY);
pub(super) const LTU: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_TUESDAY);
pub(super) const LMO: YearFlags = YearFlags(LEAP_YEAR | YEAR_STARTS_AFTER_MONDAY);
pub(super) const YEAR_TO_FLAGS: &[YearFlags; 400] = &[
LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU,
NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE,
NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR,
NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO,
LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH,
NFR, LSA, NMO, NTU, NWE, NTH, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA,
NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO,
NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH,
LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU,
NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE,
NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, NTU, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH,
NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU,
LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE,
NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA,
NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO,
NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, NSU, NMO, NTU, NWE,
LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA,
NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU,
NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU, LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH,
NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE, NTH, LFR, NSU, NMO, NTU, LWE, NFR, NSA, NSU,
LMO, NWE, NTH, NFR, LSA, NMO, NTU, NWE, LTH, NSA, NSU, NMO, LTU, NTH, NFR, NSA, LSU, NTU, NWE,
NTH,
];
#[allow(unused)]
const ORDINAL_MASK: i32 = 0b1_1111_1111_0000;
#[allow(unused)]
const LEAP_YEAR_MASK: i32 = 0b1000;
#[allow(unused)]
const OL_MASK: i32 = ORDINAL_MASK | LEAP_YEAR_MASK;
pub(super) const MAX_OL: u32 = 366 << 1; pub(super) const MAX_MDL: u32 = (12 << 6) | (31 << 1) | 1;
pub(super) const XX: i8 = 0;
pub(super) const MDL_TO_OL: &[i8; MAX_MDL as usize + 1] = &[
XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX,
XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX,
XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, XX, XX, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, XX, XX, XX, XX, XX, XX, XX, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74,
72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74,
72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, XX, XX, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76,
74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76,
74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, XX, XX, XX, XX, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80,
78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80,
78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, XX, XX, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82,
80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82,
80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, XX, XX, XX, XX, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86,
84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86,
84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, XX, XX, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88,
86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88,
86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, XX, XX, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90,
88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90,
88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, XX, XX, XX, XX, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94,
92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94,
92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, XX, XX, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96,
94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96,
94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, XX, XX, XX, XX, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98,
100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100,
98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98,
100, ];
pub(super) const OL_TO_MDL: &[u8; MAX_OL as usize + 1] = &[
0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72,
74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72,
74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 74, 72, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74,
76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74,
76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 76, 74, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78,
80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78,
80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 80, 78, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80,
82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80,
82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 82, 80, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84,
86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84,
86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 86, 84, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86,
88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86,
88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 88, 86, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88,
90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88,
90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 90, 88, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92,
94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92,
94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 94, 92, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94,
96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94,
96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 96, 94, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100,
98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98,
100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100, 98, 100,
98, ];