import Foundation

extension Date {
    
    var seconds: Int {
        timeIntervalSince1970.roundedInt
    }
    
    var secondsToNow: Int {
        -timeIntervalSinceNow.roundedInt
    }
    
    init(seconds: Int) {
        self.init(timeIntervalSince1970: TimeInterval(seconds))
    }
    
    var shortTimePassedText: String {
        let secs = secondsToNow
        guard secs > 1 else {
            return "Now"
        }
        guard secs >= 60 else {
            return "\(secs) s ago"
        }
        let minutes = secs / 60
        guard minutes >= 60 else {
            return "\(minutes) min ago"
        }
        let hours = minutes / 60
        guard hours > 1 else {
            return "1 hour ago"
        }
        guard hours >= 60 else {
            return "\(hours) hours ago"
        }
        let days = hours / 24
        guard days > 1 else {
            return "1 day ago"
        }
        return "\(days) days ago"
    }
    
    var timePassedText: String {
        let secs = secondsToNow
        guard secs > 1 else {
            return "Now"
        }
        guard secs >= 60 else {
            return "\(secs) seconds ago"
        }
        let minutes = secs / 60
        guard minutes > 1 else {
            return "1 minute ago"
        }
        guard minutes >= 60 else {
            return "\(minutes) minutes ago"
        }
        let hours = minutes / 60
        guard hours > 1 else {
            return "1 hour ago"
        }
        guard hours >= 60 else {
            return "\(hours) hours ago"
        }
        let days = hours / 24
        guard days > 1 else {
            return "1 day ago"
        }
        return "\(days) days ago"
    }
    
    var dateIndex: Int {
        let components = Calendar.current.dateComponents([.day, .month, .year], from: self)
        return components.year! * 10000 + components.month! * 100 + components.day!
    }
    
    init(dateIndex: Int) {
        let year = dateIndex / 10000
        let month = (dateIndex % 10000) / 100
        let day = dateIndex % 100
        self = Calendar.current.date(from: .init(year: year, month: month, day: day))!
    }
    
    var startOfDay: Date {
        Calendar.current.startOfDay(for: self)
    }
    
    var startOfNextDay: Date {
        startOfDay.addingTimeInterval(86400)
    }
    
    func adding(seconds: Int) -> Date {
        addingTimeInterval(TimeInterval(seconds))
    }
    
    var nearestSecond: Date {
        .init(seconds: seconds)
    }
}
