package com.example.m20_gamepad.data

import com.example.m20_gamepad.video.VideoCodec

/**
 * 视频缩放模式。
 */
enum class VideoResizeMode {
    /** 等比缩放，完整显示（留黑边） */
    FIT,
    /** 等比缩放，填充全屏（裁切多余部分） */
    ZOOM,
    /** 拉伸填满全屏 */
    FILL
}

/**
 * 应用配置数据类。
 *
 * 所有设置项的当前值快照。通过 [SettingsRepository.settings] Flow 暴露，
 * 修改单项通过 [SettingsRepository] 的对应方法写入。
 */
data class AppSettings(
    val robotHost: String = DEFAULT_ROBOT_HOST,
    val robotPort: Int = DEFAULT_ROBOT_PORT,
    val rtspUrl: String = DEFAULT_RTSP_URL,
    val videoCodec: VideoCodec = VideoCodec.AUTO,
    val videoResizeMode: VideoResizeMode = VideoResizeMode.ZOOM
) {
    companion object {
        const val DEFAULT_ROBOT_HOST = "10.21.41.1"
        const val DEFAULT_ROBOT_PORT = 30000
        const val DEFAULT_RTSP_URL = "rtsp://10.21.41.1:8554/video1"

        /** RTSP 端口范围校验 */
        fun isValidPort(port: Int): Boolean = port in 1..65535

        /** 主机地址非空且不包含空白 */
        fun isValidHost(host: String): Boolean =
            host.isNotBlank() && !host.any { it.isWhitespace() }
    }
}
