// now() is fixed, test uses different millisprovider!

rule "dates"
when
    parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") == parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    now("CET") == now("UTC") &&
    now("CET") == now() &&
    flex_parse_date(value: "30th July 2010 18:03:25    ", timezone: "CET") == parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    format_date(flex_parse_date("30th July 2010 18:03:25"), "yyyy-MM-dd") == "2010-07-30" &&
    parse_date("2010-07-30T18:03:24+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") < parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    !(parse_date("2010-07-30T18:03:24+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") >= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
    parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") > parse_date("2010-07-30T16:03:24Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    !(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") <= parse_date("2010-07-30T16:03:24Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
    parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") <= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    !(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") > parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
    parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") >= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
    !(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") < parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
    is_date(now("CET")) == true &&
    is_date("foobar") == false &&
    is_date(1234) == false &&
    is_date(12.34) == false
then
    trigger_test();
    let date = parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ");
    set_field("year", date.year);
    set_field("timezone", to_string(date.zone));

    // Date parsing locales
    let germanDate = parse_date(value: "24. Juli 1983", pattern: "dd. MMM yyyy", locale: "de");
    set_field("german_day", germanDate.dayOfMonth);
    set_field("german_month", germanDate.monthOfYear);
    set_field("german_weekday", germanDate.dayOfWeek);
    set_field("german_year", germanDate.year);

    let englishDate = parse_date(value: "July 24, 1983", pattern: "MMM dd, yyyy", locale: "en");
    set_field("english_day", englishDate.dayOfMonth);
    set_field("english_month", englishDate.monthOfYear);
    set_field("english_year", englishDate.year);

    let frenchDate = parse_date(value: "24 juillet 1983", pattern: "dd MMM yyyy", locale: "fr");
    set_field("french_day", frenchDate.dayOfMonth);
    set_field("french_month", frenchDate.monthOfYear);
    set_field("french_year", frenchDate.year);

    set_field("ts_hour", $message.timestamp.hourOfDay);
    set_field("ts_minute", $message.timestamp.minuteOfHour);
    set_field("ts_second", $message.timestamp.secondOfMinute);
end
