import Testing
import Foundation
@testable import nahbar

// MARK: - formatLastMoment Tests
//
// Testet die formatLastMoment-Hilfsfunktion aus PeopleListView.
// `now` wird injiziert, damit Zeitangaben deterministisch sind.

@Suite("PersonRow – formatLastMoment")
struct PersonRowTests {

    private let now = Date(timeIntervalSinceReferenceDate: 0)

    @Test("Ausgabe beginnt immer mit 'Zuletzt '")
    func outputStartsWithZuletzt() {
        let date = now.addingTimeInterval(-3600) // 1 Stunde zuvor
        #expect(formatLastMoment(date, relativeTo: now).hasPrefix("Zuletzt "))
    }

    @Test("Ausgabe ist nicht leer")
    func outputIsNotEmpty() {
        let date = now.addingTimeInterval(-86400)
        #expect(!formatLastMoment(date, relativeTo: now).isEmpty)
    }

    @Test("3 Tage zuvor enthält 'vor 3 Tagen'")
    func threeDaysAgoContainsCorrectText() {
        let date = now.addingTimeInterval(-(3 * 86400))
        let result = formatLastMoment(date, relativeTo: now)
        #expect(result.contains("3 Tagen"), "Erwartet '3 Tagen' in '\(result)'")
    }

    @Test("7 Tage zuvor enthält Wochenangabe")
    func sevenDaysAgoContainsWeek() {
        let date = now.addingTimeInterval(-(7 * 86400))
        let result = formatLastMoment(date, relativeTo: now)
        // "vor einer Woche" oder "vor 7 Tagen" je nach OS-Version
        let hasWeekOrDays = result.contains("Woche") || result.contains("Tagen") || result.contains("Tag")
        #expect(hasWeekOrDays, "Erwartet Wochen- oder Tagesangabe in '\(result)'")
    }

    @Test("30 Tage zuvor enthält Wochen- oder Monatsangabe")
    func thirtyDaysAgoContainsWeekOrMonth() {
        let date = now.addingTimeInterval(-(30 * 86400))
        let result = formatLastMoment(date, relativeTo: now)
        let hasUnit = result.contains("Woche") || result.contains("Monat")
        #expect(hasUnit, "Erwartet 'Woche' oder 'Monat' in '\(result)'")
    }

    @Test("400 Tage zuvor enthält Jahresangabe")
    func fourHundredDaysAgoContainsYear() {
        let date = now.addingTimeInterval(-(400 * 86400))
        let result = formatLastMoment(date, relativeTo: now)
        #expect(result.contains("Jahr"), "Erwartet 'Jahr' in '\(result)'")
    }

    @Test("Zukünftiges Datum enthält 'in' (Zukunft)")
    func futureDateContainsIn() {
        let date = now.addingTimeInterval(86400)
        let result = formatLastMoment(date, relativeTo: now)
        #expect(result.contains("in") || result.contains("morgen"),
                "Erwartet Zukunftsform in '\(result)'")
    }
}
