package com.chick_mood.data.model

import androidx.room.Entity
import androidx.room.PrimaryKey

/**
 * 用户配置数据模型
 * 存储用户的个人设置和偏好配置
 *
 * @author Claude
 * @date 2025-10-22
 */
@Entity(tableName = "user_config")
data class UserConfig(
    /**
     * 主键ID，固定为1
     */
    @PrimaryKey
    val id: Int = 1,

    /**
     * 用户昵称
     */
    val nickname: String? = null,

    /**
     * 用户头像路径
     */
    val avatarPath: String? = null,

    /**
     * 是否启用深色模式
     */
    val isDarkMode: Boolean = false,

    /**
     * 是否启用声音反馈
     */
    val isSoundEnabled: Boolean = true,

    /**
     * 是否启用震动反馈
     */
    val isVibrationEnabled: Boolean = true,

    /**
     * 心情记录提醒开关
     */
    val isReminderEnabled: Boolean = false,

    /**
     * 提醒时间（小时，0-23）
     */
    val reminderHour: Int = 20,

    /**
     * 提醒时间（分钟，0-59）
     */
    val reminderMinute: Int = 0,

    /**
     * 应用版本号
     */
    val appVersion: String = "1.0.0",

    /**
     * 数据版本号（用于数据迁移）
     */
    val dataVersion: Int = 1,

    /**
     * 首次使用时间戳
     */
    val firstUseTime: Long = System.currentTimeMillis(),

    /**
     * 总使用次数
     */
    val totalUsageCount: Int = 0,

    /**
     * 最后使用时间戳
     */
    val lastUsedTime: Long = System.currentTimeMillis()
) {
    /**
     * 获取完整的提醒时间字符串
     * @return 格式化的提醒时间（HH:mm）
     */
    fun getReminderTimeString(): String {
        return String.format("%02d:%02d", reminderHour, reminderMinute)
    }

    /**
     * 检查是否设置了提醒时间
     * @return true如果设置了有效的提醒时间
     */
    fun hasValidReminderTime(): Boolean {
        return isReminderEnabled && reminderHour in 0..23 && reminderMinute in 0..59
    }

    /**
     * 检查用户是否已设置昵称
     * @return true如果昵称不为空
     */
    fun hasNickname(): Boolean {
        return !nickname.isNullOrEmpty()
    }

    /**
     * 检查用户是否已设置头像
     * @return true如果头像路径不为空
     */
    fun hasAvatar(): Boolean {
        return !avatarPath.isNullOrEmpty()
    }

    /**
     * 获取使用天数
     * @return 从首次使用到现在的天数
     */
    fun getUsageDays(): Int {
        val currentTime = System.currentTimeMillis()
        val diffInMillis = currentTime - firstUseTime
        return (diffInMillis / (24 * 60 * 60 * 1000)).toInt() + 1
    }

    companion object {
        /**
         * 默认用户配置
         */
        fun getDefault(): UserConfig {
            return UserConfig()
        }

        /**
         * 创建测试用的用户配置
         * @param nickname 测试昵称
         * @return 测试用户配置
         */
        fun createTestConfig(nickname: String = "测试用户"): UserConfig {
            return UserConfig(
                nickname = nickname,
                isDarkMode = false,
                isSoundEnabled = true,
                isVibrationEnabled = true,
                isReminderEnabled = true,
                reminderHour = 20,
                reminderMinute = 0,
                totalUsageCount = 10,
                lastUsedTime = System.currentTimeMillis()
            )
        }
    }
}