//
//  NearFutureWidgetsLiveActivity.swift
//  NearFutureWidgets
//
//  Created by neon443 on 02/01/2025.
//

import ActivityKit
import WidgetKit
import SwiftUI

struct NearFutureWidgetsAttributes: ActivityAttributes {
    public struct ContentState: Codable, Hashable {
        // Dynamic stateful properties about your activity go here!
        var emoji: String
    }

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

struct NearFutureWidgetsLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: NearFutureWidgetsAttributes.self) { context in
            // Lock screen/banner UI goes here
            VStack {
                Text("Hello \(context.state.emoji)")
            }
            .activityBackgroundTint(Color.cyan)
            .activitySystemActionForegroundColor(Color.black)

        } dynamicIsland: { context in
            DynamicIsland {
                // Expanded UI goes here.  Compose the expanded UI through
                // various regions, like leading/trailing/center/bottom
                DynamicIslandExpandedRegion(.leading) {
                    Text("Leading")
                }
                DynamicIslandExpandedRegion(.trailing) {
                    Text("Trailing")
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text("Bottom \(context.state.emoji)")
                    // more content
                }
            } compactLeading: {
                Text("L")
            } compactTrailing: {
                Text("T \(context.state.emoji)")
            } minimal: {
                Text(context.state.emoji)
            }
            .widgetURL(URL(string: "http://www.apple.com"))
            .keylineTint(Color.red)
        }
    }
}

extension NearFutureWidgetsAttributes {
    fileprivate static var preview: NearFutureWidgetsAttributes {
        NearFutureWidgetsAttributes(name: "World")
    }
}

extension NearFutureWidgetsAttributes.ContentState {
    fileprivate static var smiley: NearFutureWidgetsAttributes.ContentState {
        NearFutureWidgetsAttributes.ContentState(emoji: "😀")
     }
     
     fileprivate static var starEyes: NearFutureWidgetsAttributes.ContentState {
         NearFutureWidgetsAttributes.ContentState(emoji: "🤩")
     }
}

#Preview("Notification", as: .content, using: NearFutureWidgetsAttributes.preview) {
   NearFutureWidgetsLiveActivity()
} contentStates: {
    NearFutureWidgetsAttributes.ContentState.smiley
    NearFutureWidgetsAttributes.ContentState.starEyes
}
