import APIClient
import ComponentLibrary
import Localization
import SwiftUI

struct CountdownView: View {
    let data: CountdownResponse
    
    let dateComponentsFormatter: DateComponentsFormatter = {
        let formatter = DateComponentsFormatter()
        formatter.allowedUnits = [.day, .hour, .minute, .second]
        formatter.unitsStyle = .abbreviated
        formatter.zeroFormattingBehavior = .pad
        return formatter
    }()
    
    let iso8601DateFormatter = ISO8601DateFormatter()
    
    var body: some View {
        TimelineView(.periodic(from: .now, by: 1)) { context in
            if let countdown = calculateCountdown(to: data.timestamp, from: context.date) {
                Text("\(data.text) \(countdown)")
                    .typographyV1(.body3, isMonospacedDigit: true)
                    .padding(8)
                    .padding(.horizontal, 8)
                    .background {
                        Capsule()
                            .strokeBorder(Color.SemanticV2.foregroundSecondary, lineWidth: 1)
                            .opacity(0.5)
                    }
            }
        }
    }
    
    private func calculateCountdown(to timestampString: String, from currentDate: Date) -> String? {
        guard let futureDate = iso8601DateFormatter.date(from: timestampString), futureDate > currentDate else {
            return nil
        }
        
        let interval = futureDate.timeIntervalSince(currentDate)

        if let formattedString = dateComponentsFormatter.string(from: interval) {
            return formattedString
        }
        
        return nil
    }
}

