package model

import java.time.LocalDateTime

data class AppConfig(
    // [DB 저장 데이터]
    // 실전 3종
    val realAppKey: String = "",
    val realSecretKey: String = "",
    val realAccountNo: String = "",

    // 모의 3종
    val vtsAppKey: String = "",
    val vtsSecretKey: String = "",
    val vtsAccountNo: String = "",

    // [세션 데이터 - 메모리에서만 관리]
    var marketToken: String = "",
    var marketTokenExpiredAt: LocalDateTime? = null, // 만료 시간 추가

    var tradeToken: String = "",
    var tradeTokenExpiredAt: LocalDateTime? = null,

    val htsId: String = "",

    var websocketToken: String = "",
    val isSimulation: Boolean = true,
    val modelPath: String = "",
    val embedModelPath: String = "") {

    val accountNo : String
        get() {
            return if (isSimulation) vtsAccountNo else realAccountNo
        }
}




// [신규] 전역에서 참조할 단일 세션 객체
object KisSession {
    var config: AppConfig = AppConfig()
    fun getWebSocketKey() = config.websocketToken
    // 시장 데이터 토큰 유효성 검사 (만료 5분 전부터는 유효하지 않은 것으로 간주)
    fun isMarketTokenValid(): Boolean {
        return config.marketToken.isNotEmpty() &&
                config.marketTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false
    }

    // 매매용 토큰 유효성 검사
    fun isTradeTokenValid(): Boolean {
        return config.tradeToken.isNotEmpty() &&
                config.tradeTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false
    }
}