import XCTest
@testable import lichunWebsocket

final class EventV2RenderingTests: XCTestCase {
    func testEventCategoryMapsKnownV2Categories() {
        XCTAssertEqual(EventCategory.fromV2Category("education"), .education)
        XCTAssertEqual(EventCategory.fromV2Category("family"), .social)
        XCTAssertEqual(EventCategory.fromV2Category("holidays"), .social)
        XCTAssertEqual(EventCategory.fromV2Category("unknown"), .neutral)
    }

    func testMessageEventStoresV2StatusAndCategoryKey() {
        let event = MessageEvent(
            id: "evt_1",
            message: "Resolved text",
            type: "event_resolved",
            date: "2026-02-11",
            hour: "12",
            energyCost: nil,
            diamondCost: nil,
            moneyCost: nil,
            affinityChange: nil,
            title: "Event Resolved",
            image: nil,
            characters: nil,
            claimed: true,
            claimedAt: Date(),
            category: .neutral,
            status: "resolved",
            categoryKey: "dilemmas"
        )

        XCTAssertEqual(event.status, "resolved")
        XCTAssertEqual(event.categoryKey, "dilemmas")
        XCTAssertNil(event.image)
        XCTAssertNil(event.characters)
    }

    func testDecodesResolvedEnvelopeWithMetadata() throws {
        let payload: [String: Any] = [
            "type": "event_resolved",
            "eventId": "event_adult",
            "instanceId": "evt-inst-1",
            "resolutionText": "You resolved the event.",
            "metadata": [
                "category": "dilemmas",
                "status": "resolved"
            ]
        ]

        let data = try JSONSerialization.data(withJSONObject: payload, options: [])
        let envelope = try JSONDecoder().decode(EventV2Envelope.self, from: data)

        switch envelope {
        case .resolved(let resolved):
            XCTAssertEqual(resolved.metadata?.category, "dilemmas")
            XCTAssertEqual(resolved.metadata?.status, "resolved")
        default:
            XCTFail("Expected event_resolved envelope")
        }
    }
}
