import ComposableArchitecture
import Foundation

/// Handles message-level error events.
///
/// This handler creates error messages when the assistant encounters an error during
/// message generation. It adds a new message with the error details to inform the user
/// what went wrong.
public struct MessageErrorHandler: OrpheusEventHandler {
    @Dependency(\.date) private var date

    public func handle(
        event: OrpheusRealtimeEvent,
        session: OrpheusSession
    ) -> EventHandlerResult {
        guard case .messageError(let messageId, let error) = event else {
            return .noOp
        }
        
        // Generate a unique ID for the error message (not the same as the failed message)
        let errorMessageId = UUID().uuidString
        
        print("⚠️ Creating error message with ID: \(errorMessageId) for failed message: \(messageId)")
        
        let errorMessage = OrpheusMessage(
            id: errorMessageId,
            role: .assistant,
            content: error,
            timestamp: date.now.timeIntervalSince1970,
            contentType: .chat,
            accumulatingToolCall: nil,
            generatedClips: [],
            isStreaming: false
        )
        let updatedMessages = session.messages + [errorMessage]
        
        return .messagesUpdated(updatedMessages)
    }
}

