//
//  DateExt.swift

//
//  Created by Leon on 2025/7/15.
//

import Foundation
import SwiftDate

extension Date {
    /// 获取当前 时间戳 - 默认毫秒
    var timeStamp: Int {
        let timeInterval: TimeInterval = timeIntervalSince1970
        let millisecond = Int(round(timeInterval * 1000))
        return millisecond
    }
    
    var timeStampInSeconds: Int {
        let timeInterval: TimeInterval = timeIntervalSince1970
        let timeStamp = Int(timeInterval)
        return timeStamp
    }

    /// 获取当前 毫秒级 时间戳 - 13位
    var milliStamp: Int {
        let timeInterval: TimeInterval = timeIntervalSince1970
        let millisecond = Int(round(timeInterval * 1000))
        return millisecond
    }

    func toString(dateFormat: String = "yyyy-MM-dd HH:mm:ss") -> String {
        let fm = DateFormatter()
        fm.dateFormat = dateFormat
        fm.locale = Locale(identifier: Languages.localRegionCode())
        return fm.string(from: self)
    }
    
    static func dateFromMilliseconds(_ ms: Int64) -> Date {
        return Date(timeIntervalSince1970: TimeInterval(ms) / 1000)
    }
    
    static func timerStyle(style: TimerStyle, millisecond: Int) -> String {
        return Date.timerStyle(style: style, second: millisecond / 1000)
    }
    
    /// second: 秒
    static func timerStyle(style: TimerStyle, second: Int) -> String {
        if second == 0 {
            return ""
        }
        let interval = TimeInterval(second)
        let date = Date(timeIntervalSince1970: interval)
        switch style {
        case .WDMYHMS:
            return date.toString(dateFormat: "E, d MMM yyyy HH:mm:ss")
        case .DMYHMS:
            return date.toString(dateFormat: "d MMM yyyy HH:mm:ss")
        case .DMYHM:
            return date.toString(dateFormat: "d MMM yyyy HH:mm")
        case .DMHM:
            return date.toString(dateFormat: "d MMM HH:mm")
        case .DMY:
            return date.toString(dateFormat: "d MMM yyyy")
        case .DM:
            return date.toString(dateFormat: "d MMM")
        case .MY:
            return date.toString(dateFormat: "MMM yyyy")
        case .HM:
            return date.toString(dateFormat: "HH:mm")
        case .IMLIST:
            return Date.timerStyleForIM(style: .IMLIST, second: second)
        case .IMCHAT:
            return Date.timerStyleForIM(style: .IMCHAT, second: second)
        case .EVENTEND:
            return date.toString(dateFormat: "d MMM HH:mm")
        default:
            return "-"
        }
    }
    
    /// IM类型的时间格式 xx(分钟\小时\天\周\月\年)前
    /// - Parameter timeStamp:  时间戳 13位
    /// - Returns: String
    private static func timerStyleForIM(style: TimerStyle, second: Int) -> String {
        let interval = TimeInterval(second)
        let last = Date(timeIntervalSince1970: interval)
        // 今天
        if last.isToday {
            return last.toString(dateFormat: "HH:mm")
        }

        switch style {
        case .IMLIST:
            // 昨天
            if last.isYesterday {
                return "Yesterday"
            }
            // 本年不带年份
            if last.compare(.isThisYear) {
                return last.toString(dateFormat: "d MMM")
            }
            return last.toString(dateFormat: "d MMM yyyy")

        case .IMCHAT:
            // 昨天
            if last.isYesterday {
                return "Yesterday" + " " + last.toString(dateFormat: "HH:mm")
            }
            // 本年不带年份
            if last.compare(.isThisYear) {
                return last.toString(dateFormat: "d MMM HH:mm")
            }
            return last.toString(dateFormat: "d MMM yyyy HH:mm")

        default:
            return ""
        }
    }
}

enum TimerStyle {
    case WDMYHMS
    case DMYHMS
    case DMYHM
    case DMHM
    case DMY
    case DM
    case MY
    case HM
    case IMLIST
    case IMCHAT
    case PUBLISH
    case COMMENT
    case EVENTEND
}


extension TimeInterval {
    /// 格式化录音时长：<1分钟显示s，>=1分钟显示 m:ss
    var imAIaudioDurationString: String {
//        let totalSeconds = Int(self)
//        let minutes = totalSeconds / 60
//        let seconds = totalSeconds % 60
//        
//        if minutes > 0 {
//            // 显示分钟:秒（秒补零）
//            return String(format: "%d:%02d''", minutes, seconds)
//        } else {
//            // 小于1分钟只显示秒
//            return "\(seconds)''"
//        }
        
        if self < 1 {
            return "1''"
        }
        
        let totalSeconds = Int(self.rounded())
        
        if totalSeconds < 60 {
            return "\(totalSeconds)''"
        }
        
        let minutes = totalSeconds / 60
        let seconds = totalSeconds % 60
        
        if seconds == 0 {
            return "\(minutes)'"
        }
        
        return String(format: "%d'%02d''", minutes, seconds)
    }
}
