package com.chick_mood.data.model

import androidx.room.Entity
import androidx.room.PrimaryKey
import java.util.Date

/**
 * 心情记录数据模型
 * 存储用户的心情记录信息，包括情绪类型、强度、文字内容和图片路径
 *
 * @author Claude
 * @date 2025-10-22
 */
@Entity(tableName = "mood_records")
data class MoodRecord(
    /**
     * 主键ID，自动生成
     */
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0,

    /**
     * 情绪类型枚举
     */
    val emotion: Emotion,

    /**
     * 心情强度值（0-100）
     * 通过摇晃传感器计算得出
     */
    val moodIntensity: Int,

    /**
     * 记录创建时间戳
     */
    val timestamp: Long,

    /**
     * 用户输入的文字描述
     */
    val textContent: String? = null,

    /**
     * 附加图片的本地路径
     */
    val imagePath: String? = null,

    /**
     * 是否已收藏
     */
    val isFavorite: Boolean = false,

    /**
     * 摇晃持续时间（秒）
     */
    val shakeDuration: Float = 0f,

    /**
     * 最大加速度值
     */
    val maxAcceleration: Float = 0f,

    /**
     * 创建时使用的设备型号
     */
    val deviceModel: String? = null
) {
    /**
     * 获取格式化的时间字符串
     * @return 格式化的时间（yyyy.MM.dd E HH:mm）
     */
    fun getFormattedTime(): String {
        val formatter = java.text.SimpleDateFormat("yyyy.MM.dd E HH:mm", java.util.Locale.getDefault())
        return formatter.format(Date(timestamp))
    }

    /**
     * 获取心情强度的描述文字
     * @return 强度描述（轻微/一般/强烈/极度）
     */
    fun getIntensityDescription(): String {
        return when {
            moodIntensity < 25 -> "轻微"
            moodIntensity < 50 -> "一般"
            moodIntensity < 75 -> "强烈"
            else -> "极度"
        }
    }

    /**
     * 获取心情强度的表情符号
     * @return 对应强度的表情符号
     */
    fun getIntensityEmoji(): String {
        return when {
            moodIntensity < 25 -> "😌"
            moodIntensity < 50 -> "😐"
            moodIntensity < 75 -> "😰"
            else -> "😱"
        }
    }

    /**
     * 检查是否包含图片
     * @return true如果包含图片
     */
    fun hasImage(): Boolean {
        return !imagePath.isNullOrEmpty()
    }

    /**
     * 检查是否包含文字内容
     * @return true如果包含文字
     */
    fun hasText(): Boolean {
        return !textContent.isNullOrEmpty()
    }

    /**
     * 获取文字内容长度
     * @return 文字长度，如果没有文字返回0
     */
    fun getTextLength(): Int {
        return textContent?.length ?: 0
    }

    companion object {
        /**
         * 心情强度的最小值
         */
        const val MIN_INTENSITY = 0

        /**
         * 心情强度的最大值
         */
        const val MAX_INTENSITY = 100

        /**
         * 文字内容的最大长度限制
         */
        const val MAX_TEXT_LENGTH = 200

        /**
         * 创建一个测试用的心情记录
         * @param emotion 情绪类型
         * @param intensity 心情强度
         * @param text 文字内容
         * @return 测试心情记录
         */
        fun createTestRecord(
            emotion: Emotion = Emotion.HAPPY,
            intensity: Int = 50,
            text: String? = "测试心情记录"
        ): MoodRecord {
            return MoodRecord(
                emotion = emotion,
                moodIntensity = intensity.coerceIn(MIN_INTENSITY, MAX_INTENSITY),
                timestamp = System.currentTimeMillis(),
                textContent = text?.take(MAX_TEXT_LENGTH),
                isFavorite = false,
                shakeDuration = 3.0f,
                maxAcceleration = 15.0f,
                deviceModel = android.os.Build.MODEL
            )
        }
    }
}