package com.chick_mood.data.database

import androidx.room.TypeConverter
import com.chick_mood.data.model.Emotion
import java.util.Date

/**
 * Room数据库类型转换器
 *
 * 提供Room数据库无法直接处理的数据类型转换
 * 包括枚举类型、日期类型等的序列化和反序列化
 *
 * @author Claude
 * @date 2025-10-22
 */
class Converters {

    /**
     * 将Emotion枚举转换为字符串
     *
     * @param emotion 情绪枚举
     * @return 枚举名称字符串
     */
    @TypeConverter
    fun fromEmotion(emotion: Emotion): String {
        return emotion.name
    }

    /**
     * 将字符串转换为Emotion枚举
     *
     * @param emotionString 枚举名称字符串
     * @return 情绪枚举，如果转换失败则返回HAPPY作为默认值
     */
    @TypeConverter
    fun toEmotion(emotionString: String): Emotion {
        return try {
            Emotion.valueOf(emotionString)
        } catch (e: IllegalArgumentException) {
            // 如果枚举值不存在，返回默认值
            Emotion.HAPPY
        }
    }

    /**
     * 将时间戳转换为Date对象
     *
     * @param value 时间戳（毫秒）
     * @return Date对象，如果值为null则返回当前时间
     */
    @TypeConverter
    fun fromDate(value: Long?): Date {
        return Date(value ?: System.currentTimeMillis())
    }

    /**
     * 将Date对象转换为时间戳
     *
     * @param date Date对象
     * @return 时间戳（毫秒），如果date为null则返回当前时间
     */
    @TypeConverter
    fun toDate(date: Date?): Long {
        return date?.time ?: System.currentTimeMillis()
    }

    /**
     * 将字符串列表转换为JSON字符串
     * 用于存储图片路径列表等复杂数据
     *
     * @param list 字符串列表
     * @return JSON字符串
     */
    @TypeConverter
    fun fromStringList(list: List<String>?): String {
        return if (list.isNullOrEmpty()) {
            "[]"
        } else {
            // 简单的JSON格式转换
            list.joinToString(prefix = "[", postfix = "]", separator = ",") { "\"$it\"" }
        }
    }

    /**
     * 将JSON字符串转换为字符串列表
     *
     * @param jsonString JSON字符串
     * @return 字符串列表
     */
    @TypeConverter
    fun toStringList(jsonString: String?): List<String> {
        return if (jsonString.isNullOrEmpty() || jsonString == "[]") {
            emptyList()
        } else {
            try {
                // 简单的JSON解析（仅处理标准格式）
                jsonString
                    .removeSurrounding("[", "]")
                    .split(",")
                    .map { it.removeSurrounding("\"").trim() }
                    .filter { it.isNotEmpty() }
            } catch (e: Exception) {
                emptyList()
            }
        }
    }

    /**
     * 将布尔值转换为整数
     *
     * @param value 布尔值
     * @return 1表示true，0表示false
     */
    @TypeConverter
    fun fromBoolean(value: Boolean?): Int {
        return if (value == true) 1 else 0
    }

    /**
     * 将整数转换为布尔值
     *
     * @param value 整数值
     * @return 1表示true，其他值表示false
     */
    @TypeConverter
    fun toBoolean(value: Int?): Boolean {
        return value == 1
    }
}