@testable import ComponentLibrary
import ComposableArchitecture
@testable import HapticsClient
import Sharing
import SwiftUI
import Testing
import Utilities

@Suite("HapticsClient Tests")
struct HapticsClientTests {
    @Test("Impact styles map correctly to UIKit styles")
    func testImpactStyleToUIKitMapping() {
        #expect(ImpactStyle.light.uiKitStyle == .light)
        #expect(ImpactStyle.medium.uiKitStyle == .medium)
        #expect(ImpactStyle.heavy.uiKitStyle == .heavy)
        #expect(ImpactStyle.soft.uiKitStyle == .soft)
        #expect(ImpactStyle.rigid.uiKitStyle == .rigid)
    }

    @Test("Notification types map correctly to UIKit types")
    func testNotificationTypeToUIKitMapping() {
        #expect(NotificationType.success.uiKitType == .success)
        #expect(NotificationType.warning.uiKitType == .warning)
        #expect(NotificationType.error.uiKitType == .error)
    }

    @Test("Haptic styles map correctly to SwiftUI sensory feedback")
    func testSensoryFeedbackMapping() {
        #expect(HapticStyle.impact(.light).sensoryFeedback == .impact(weight: .light))
        #expect(HapticStyle.impact(.medium).sensoryFeedback == .impact(weight: .medium))
        #expect(HapticStyle.impact(.heavy).sensoryFeedback == .impact(weight: .heavy))
        #expect(HapticStyle.impact(.soft).sensoryFeedback == .impact(flexibility: .soft))
        #expect(HapticStyle.impact(.rigid).sensoryFeedback == .impact(flexibility: .rigid))

        #expect(HapticStyle.notification(.success).sensoryFeedback == .success)
        #expect(HapticStyle.notification(.warning).sensoryFeedback == .warning)
        #expect(HapticStyle.notification(.error).sensoryFeedback == .error)

        #expect(HapticStyle.selection.sensoryFeedback == .selection)
    }
}
