/*
 * Copyright 2022 Bjarki Arge Andreasen
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/ztest.h>
#include <zephyr/device.h>
#include <zephyr/drivers/rtc.h>
#include <zephyr/sys/timeutil.h>

#include <time.h>
#include <string.h>

/* Wed Dec 31 2025 23:59:55 GMT+0000 */
#define RTC_TEST_GET_SET_TIME	  (1767225595UL)
#define RTC_TEST_GET_SET_TIME_TOL (1UL)

static const struct device *rtc = DEVICE_DT_GET(DT_ALIAS(rtc));

ZTEST(rtc_api, test_set_get_time)
{
	struct rtc_time datetime_set;
	struct rtc_time datetime_get;
	time_t timer_get;
	time_t timer_set = RTC_TEST_GET_SET_TIME;

	gmtime_r(&timer_set, (struct tm *)(&datetime_set));

	memset(&datetime_get, 0xFF, sizeof(datetime_get));

	zassert_equal(rtc_set_time(rtc, &datetime_set), 0, "Failed to set time");

	zassert_equal(rtc_get_time(rtc, &datetime_get), 0,
		      "Failed to get time using rtc_time_get()");

	zassert_true((datetime_get.tm_sec > -1) && (datetime_get.tm_sec < 60),
		     "Invalid tm_sec");

	zassert_true((datetime_get.tm_min > -1) && (datetime_get.tm_min < 60),
		     "Invalid tm_min");

	zassert_true((datetime_get.tm_hour > -1) && (datetime_get.tm_hour < 24),
		     "Invalid tm_hour");

	zassert_true((datetime_get.tm_mday > 0) && (datetime_get.tm_mday < 32),
		      "Invalid tm_mday");

	zassert_true((datetime_get.tm_year > 124) && (datetime_get.tm_year < 127),
		     "Invalid tm_year");

	zassert_true((datetime_get.tm_wday > -2) && (datetime_get.tm_wday < 7),
		     "Invalid tm_wday");

	zassert_true((datetime_get.tm_yday > -2) && (datetime_get.tm_yday < 366),
		     "Invalid tm_yday");

	zassert_equal(datetime_get.tm_isdst, -1, "Invalid tm_isdst");

	zassert_true((datetime_get.tm_nsec > -1) && (datetime_get.tm_yday < 1000000000),
		     "Invalid tm_yday");

	timer_get = timeutil_timegm((struct tm *)(&datetime_get));

	zassert_true((timer_get >= RTC_TEST_GET_SET_TIME) &&
		     (timer_get <= (RTC_TEST_GET_SET_TIME + RTC_TEST_GET_SET_TIME_TOL)),
		     "Got unexpected time");
}
