package com.example.todolist.common;

import static org.junit.jupiter.api.Assertions.*;

import java.time.LocalDate;

import org.junit.jupiter.api.Test;

class UtilsTest {

	@Test
	void testStr2date_valid() {
		LocalDate d = Utils.str2date("2026-01-16");
		assertNotNull(d);
		assertEquals(2026, d.getYear());
		assertEquals(1, d.getMonthValue());
		assertEquals(16, d.getDayOfMonth());
	}

	@Test
	void testStr2date_invalidOrEmpty() {
		assertNull(Utils.str2date(null));
		assertNull(Utils.str2date(""));
		assertNull(Utils.str2date("2026/01/16"));
	}

	@Test
	void testStr2dateOrNull() {
		assertNull(Utils.str2dateOrNull(null));
		assertNull(Utils.str2dateOrNull(""));
		assertNull(Utils.str2dateOrNull("invalid-date"));
		LocalDate d = Utils.str2dateOrNull("2026-01-16");
		assertNotNull(d);
	}

	@Test
	void testDate2str() {
		LocalDate d = LocalDate.of(2026, 1, 16);
		assertEquals("2026-01-16", Utils.date2str(d));
		assertEquals("", Utils.date2str(null));
	}

	@Test
	void testIsAllDoubleSpace() {
		assertTrue(Utils.isAllDoubleSpace(null));
		assertTrue(Utils.isAllDoubleSpace(""));
		assertTrue(Utils.isAllDoubleSpace("　　")); // 全角スペース2個
		assertFalse(Utils.isAllDoubleSpace(" 　")); // 半角+全角
	}

	@Test
	void testIsBlank() {
		assertTrue(Utils.isBlank(null));
		assertTrue(Utils.isBlank(""));
		assertTrue(Utils.isBlank("   \t"));
		assertFalse(Utils.isBlank(" a "));
	}

	@Test
	void testIsValidDateFormat() {
		assertFalse(Utils.isValidDateFormat(null));
		assertFalse(Utils.isValidDateFormat(""));
		assertTrue(Utils.isValidDateFormat("2026-01-16"));
		assertFalse(Utils.isValidDateFormat("2026/01/16"));
	}

	@Test
	void testIsTodayOrFutureDate() {
		LocalDate today = LocalDate.now();
		String todayStr = today.toString();
		String futureStr = today.plusDays(1).toString();
		String pastStr = today.minusDays(1).toString();

		assertTrue(Utils.isTodayOrFutureDate(todayStr));
		assertTrue(Utils.isTodayOrFutureDate(futureStr));
		assertFalse(Utils.isTodayOrFutureDate(pastStr));
		assertFalse(Utils.isTodayOrFutureDate("invalid-date"));
	}
}
