//
// Copyright 2025 Element Creations Ltd.
// Copyright 2023-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//

import Compound
import SwiftUI

struct AlertScreen: View {
    @State private var isPresentingActionAlert = false
    @State private var isPresentingActionAndCancelAlert = false
    @State private var isPresentingDestructiveAlert = false
    @State private var isPresentingTextFieldAlert = false
    @State private var textFieldValue = ""
    
    private let title = "A Short Title is Best"
    private let message = "A message should be a short, complete sentence."
    
    var body: some View {
        ScreenContent(navigationTitle: "Alerts") {
            Text("This component will be rendered differently when running on macOS.")
                .font(.footnote)
                .foregroundColor(.secondary)
                .multilineTextAlignment(.center)
            
            Button("Action") { isPresentingActionAlert = true }
                .padding(.top)
                .alert(title, isPresented: $isPresentingActionAlert) {
                    Button("Action") { }
                } message: {
                    Text(message)
                }
            
            Button("Action and Cancel") { isPresentingActionAndCancelAlert = true }
                .padding(.top)
                .alert(title, isPresented: $isPresentingActionAndCancelAlert) {
                    Button("Action") { }
                    Button("Cancel", role: .cancel) { }
                } message: {
                    Text(message)
                }
            
            Button("Destructive") { isPresentingDestructiveAlert = true }
                .padding(.top)
                .alert(title, isPresented: $isPresentingDestructiveAlert) {
                    Button("Action") { }
                    Button("Destructive", role: .destructive) { }
                    Button("Cancel", role: .cancel) { }
                } message: {
                    Text(message)
                }
            
            Button("TextField") { isPresentingTextFieldAlert = true }
                .padding(.top)
                .alert(title, isPresented: $isPresentingTextFieldAlert) {
                    TextField("Input", text: $textFieldValue, prompt: Text("Placeholder"))
                    Button("Action") { }
                    Button("Cancel", role: .cancel) { }
                } message: {
                    Text(message)
                }
        }
    }
}

struct AlertScreen_Previews: PreviewProvider {
    static var previews: some View {
        NavigationStack {
            AlertScreen()
        }
        .introspect(.window, on: .supportedVersions) { window in
            // Fix the tint colour like the App strut does.
            window.tintColor = .compound.textActionPrimary
        }
        .previewLayout(.fixed(width: 375, height: 750))
    }
}
