//
//  NgaNotificationView.swift
//  forShip
//
//  Created by Mamoru Sugita on 2023/10/18.
//

import SwiftUI

struct NgaNotificationView: View {
    @ObservedObject var taskViewModel: TaskViewModel
    @ObservedObject var ngaData = SharingData.nga
    @Environment(\ .colorScheme) var colorScheme
    @State var isDelete: Bool = false
    @State var isRunningStopNga: Bool = false

    var body: some View {
        VStack {
            ForEach(ngaData.ngaArea.map{ $0.1 }.sorted{ $0.name < $1.name }, id: \.areaId) { nga in
//            ForEach(ngaData.ngaArea.map{ $0.1 }, id: \.areaId) { nga in
                VStack {
                    HStack {
                        //NGA開始・終了ボタン
                        Button {
                            var newData = nga
                            newData.isRunning.toggle()
                            newData.passingCnt = 0
                            if newData.isRunning {
                                ngaData.editNgaArea(value: newData, type: NgaOperation.Running)
                            } else {
                                ngaData.editNgaArea(value: newData, type: NgaOperation.Cancel)
                            }
                        } label: {
                            HStack {
                                Circle()
                                    .frame(width: 14, height: 14)
                                    .foregroundColor(nga.isRunning ? ColorSet.PrimaryActiveIcon.color : ColorSet.TaskStateIcon.color)
                                Spacer()
                                    .frame(width: 10)
                            }
                        }

                        //NGA移動
                        Text(nga.name)
                            .font(FontStyle.DefaultText.font)
                            .foregroundColor(ColorSet.Body.color)
                            .onTapGesture {
                                ngaData.focusNga = nga.areaId.uuidString
                            }

                        Spacer()

                        Menu {
                            Text(nga.name)

                            Button{
                                ngaData.editNga = nga
                                taskViewModel.viewMode = .NgaSetting
                                ngaData.editType = EditNgaType.nonEdit
                            } label: {
                                Text("Edit Nga Setting")
                            }

                            //削除
                            Button{
                                ngaData.editNga = nga
                                isDelete = true
                            } label: {
                                Text("Delete NGA Notification")
                            }.disabled(nga.isLock)
                        } label: {
                            Image(systemName: "ellipsis")
                                .frame(width: 22, height: 22)
                                .opacity(nga.isRunning ? 0.2 : 1.0)
                                .foregroundColor(colorScheme == .light ? .black : .white)
                        }
                        .disabled(nga.isRunning)
                        .alert("Delete", isPresented: $isDelete) {
                            Button("Yes") {
                                if let newData = ngaData.editNga {
                                    ngaData.editNgaArea(value: newData, type: NgaOperation.Delete)
                                    ngaData.editNga = nil
                                }
                            }
                            Button("No"){}
                        } message: {
                            Text("Delete " + nga.name + " ?")
                        }
                        .alert("NGA Switching", isPresented:$isRunningStopNga) {
                            Button("Yes") {
                                var newData = nga
                                newData.isRunning = false
                                ngaData.editNgaArea(value: newData, type: NgaOperation.Cancel)
                            }
                            Button("No"){}
                        } message: {
                            Text("Have you finished " + nga.name + "switching?")
                        }
                    }
                    .frame(height: 60)
                    .padding(.horizontal, 30)
                    
                    Divider()
                        .background(.white)
                }
            }
            //Add NGAボタン
            let isAddNga = ngaData.ngaArea.count < ngaAreaMax
            Button(action: {
                if var ngaTmp = RegisteredNga(areaName: "") {
                    ngaTmp.isLock = false
                    ngaTmp.isRunning = false
                    ngaTmp.name = "NGA Area" + String(ngaData.ngaArea.count)
                    ngaData.editType = EditNgaType.nonEdit
                    ngaData.editNga = ngaTmp
                    taskViewModel.viewMode = .NgaSetting
                }
            }, label: {
                Text("Add NGA Task")
                    .font(FontStyle.DefaultText.font)
                    .padding()
            })
            .frame(width: 153, height: 42)
            .foregroundColor(ColorSet.ButtonText.color)
            .background(!isAddNga ? ColorSet.SecondaryDisable.color : ColorSet.PrimaryActiveIcon.color)
            .cornerRadius(30)
            .disabled(!isAddNga)

            Spacer()
        }
    }
}


#Preview {
    NgaNotificationView(taskViewModel: TaskViewModel())
}
