//
//  Gran_Fondo_StatusLiveActivity.swift
//  Gran Fondo Status
//
//  Created by Willem L. Middelkoop on 01/05/2024.
//

import ActivityKit
import HealthKit
import WidgetKit
import SwiftUI

struct Gran_Fondo_StatusAttributes: ActivityAttributes {
    public struct ContentState: Codable, Hashable {
        var isPaused: Bool = false
        var currentHeartRate: Int
        var currentPower: Int
        var currentCadence: Int
        var currentSpeed: Double
        var currentSpeedText: String
        
        var isHeartRateMonitorConnected: Bool = false
        var isPowerMeterConnected: Bool = false
        var isCadenceSensorConnected: Bool = false
        var isSpeedSensorConnected: Bool = false
        
        var totalDistance: Double
        var totalDistanceText: String
        var elapsedTime: TimeInterval
        var elapsedTimeText: String
    }

    // Fixed non-changing properties about your activity go here!
    var activityImageName: String
    var activityDescription: String
}

struct Gran_Fondo_StatusLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: Gran_Fondo_StatusAttributes.self) { context in
            
            VStack {
                if context.state.isPaused {
                    Text(context.attributes.activityDescription + ": paused")
                        .fontWeight(.bold)
                        .font(.system(size: 25)
                            .monospacedDigit())
                        .padding(.bottom, 7)
                        .foregroundColor(.orange)
                }else{
                    Text(context.attributes.activityDescription + ": " + context.state.totalDistanceText+" in "+context.state.elapsedTimeText)
                        .fontWeight(.bold)
                        .font(.system(size: 25)
                            .monospacedDigit())
                        .padding(.bottom, 7)
                }
                HStack(alignment: .center){
                    Image(systemName: "arrowshape.right.fill")
                        .font(.system(size: 15))
                    Text(context.state.currentSpeedText)
                        .font(.system(size: 20).monospacedDigit())
                        .fontWeight(.regular)
                    
                    if context.state.isCadenceSensorConnected {
                        Image(systemName: "arrow.counterclockwise.circle")
                            .font(.system(size: 15))
                        Text("\( context.state.currentCadence)")
                            .font(.system(size: 20).monospacedDigit())
                            .fontWeight(.regular)
                    }
                    
                    if context.state.isPowerMeterConnected {
                        Image(systemName: "bolt.fill")
                            .font(.system(size: 15))
                        Text("\( context.state.currentPower)")
                            .font(.system(size: 20).monospacedDigit())
                            .fontWeight(.regular)
                        
                    }
                    if context.state.isHeartRateMonitorConnected {
                        Image(systemName: "heart.fill")
                            .font(.system(size: 15))
                        Text("\( context.state.currentHeartRate)")
                            .font(.system(size: 20).monospacedDigit())
                            .fontWeight(.regular)
                    }
                }
            }
            .padding()
            .activityBackgroundTint(Color(red: 0.5, green: 0.5, blue: 0.5).opacity(0.5))
            
        } dynamicIsland: { context in
            DynamicIsland {
                // Expanded UI goes here.  Compose the expanded UI through
                // various regions, like leading/trailing/center/bottom
                DynamicIslandExpandedRegion(.leading) {
                   /* Image(systemName: context.attributes.activityImageName)
                        .foregroundColor(.white)
                        .font(.system(size: 10))
                        .frame(width:15)
                        .padding()*/
                }
                DynamicIslandExpandedRegion(.trailing) {
                    /*Text(context.attributes.activityDescription + ": " + context.state.totalDistanceText+" in "+context.state.elapsedTimeText)
                        .padding()*/
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text(context.attributes.activityDescription + ": " + context.state.totalDistanceText+" in "+context.state.elapsedTimeText)
                        .fontWeight(.bold)
                        .font(.system(size: 25)
                        .monospacedDigit())
                        .padding()
                }
            } compactLeading: {
                Image(systemName: context.attributes.activityImageName)
                    .foregroundColor(.white)
                    .font(.system(size: 10))
                    .frame(width:20)
            } compactTrailing: {
                Text(context.state.totalDistanceText)
                    .padding()
            } minimal: {
                Image(systemName: context.attributes.activityImageName)
                    .foregroundColor(.white)
                    .font(.system(size: 10))
                    .frame(width:15)
            }
            .widgetURL(URL(string: "https://willem.com"))
            .keylineTint(Color.red)
        }
    }
}

