//
//  YHAIChatDataBaseModel.swift
//  galaxy
//
//  Created by Dufet on 2024/12/2.
//  Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//

import UIKit
import Realm
import RealmSwift

class YHAIChatDataBaseModel: NSObject {

}

class YHAIChatDBMessage: Object {
    
    @objc var uuid: String = ""

    @objc dynamic var id: String = ""
    @objc dynamic var event: String = ""
    @objc dynamic var data: String = ""
    
    @objc dynamic var is_self: Bool = false
    @objc dynamic var is_done: Bool = false
    
    //重写 Object.primaryKey() 可以设置模型的主键。
    //声明主键之后，对象将被允许查询，更新速度更加高效，并且要求每个对象保持唯一性。
    //一旦带有主键的对象被添加到 Realm 之后，该对象的主键将不可修改。
    override static func primaryKey() -> String? {
        return "uuid"
    }
    
    //重写 Object.ignoredProperties() 可以防止 Realm 存储数据模型的某个属性
    override static func ignoredProperties() -> [String] {
//        return ["tempID"]
        return []
    }
    
    //重写 Object.indexedProperties() 方法可以为数据模型中需要添加索引的属性建立索引，Realm 支持为字符串、整型、布尔值以及 Date 属性建立索引。
    override static func indexedProperties() -> [String] {
//        return ["name"]
        return []
    }
    
    static func createMessage(_ message: YHAIChatMessage) -> YHAIChatDBMessage {
        
        let msg = YHAIChatDBMessage()
        msg.uuid = message.messageId
        msg.id = message.id
        msg.event = message.event
        msg.data = message.data
        msg.is_self = message.isSelf
        msg.is_done = message.isDone
        print("DB WRITE-- \(message)")
        return msg
    }
    
    func getMessage() -> YHAIChatMessage {
        
        let msg = YHAIChatMessage()
        msg.messageId = self.uuid
        msg.id = self.id
        msg.event = self.event
        msg.data = self.data
        msg.isSelf = self.is_self
        msg.isDone = self.is_done
        print("DB READ-- \(msg)")
        if let jsonData = self.data.data(using: .utf8) {
            do {
                let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any]
                let dic = (jsonDict ?? [:])
                msg.dataDict = dic
                if let body = YHAIMessageBody.deserialize(from: dic) {
                    msg.body = body
                }
                
            } catch {
                
            }
        }
        return msg
    }
}

