package com.example.godeye.models

/**
 * Активная сессия камеры с оператором
 * Соответствует требованиям ТЗ для управления WebRTC сессиями
 */
data class CameraSession(
    val sessionId: String,
    val operatorId: String,
    var cameraType: String,
    val startTime: Long,
    var isActive: Boolean = true,
    var webRTCConnected: Boolean = false
)

/**
 * Запрос доступа к камере от оператора
 * Получается через Socket.IO событие "camera:request"
 */
data class CameraRequest(
    val sessionId: String,
    val operatorId: String,
    val cameraType: String
)

/**
 * События Socket.IO для типизированной обработки
 * Соответствует архитектуре ТЗ с WebSocket сигнализацией
 */
sealed class SocketEvent {
    data class RegisterAndroid(val deviceId: String, val deviceInfo: DeviceInfo) : SocketEvent()
    data class CameraRequestEvent(val sessionId: String, val operatorId: String, val cameraType: String) : SocketEvent()
    data class CameraResponse(val sessionId: String, val accepted: Boolean, val reason: String = "") : SocketEvent()
    data class WebRTCOffer(val sessionId: String, val offer: String) : SocketEvent()
    data class WebRTCAnswer(val sessionId: String, val answer: String) : SocketEvent()
    data class IceCandidate(val sessionId: String, val candidate: String, val sdpMid: String, val sdpMLineIndex: Int) : SocketEvent()
    data class CameraSwitch(val sessionId: String, val cameraType: String) : SocketEvent()
    data class SessionEnd(val sessionId: String, val reason: String) : SocketEvent()
}

/**
 * Ошибки приложения согласно ТЗ
 */
sealed class AppError {
    object NetworkError : AppError()
    object CameraPermissionDenied : AppError()
    object CameraNotAvailable : AppError()
    object WebRTCConnectionFailed : AppError()
    data class SocketError(val message: String) : AppError()
    data class UnknownError(val throwable: Throwable) : AppError()
}
