//
//  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

    var body: some View {
        VStack {
            ForEach(ngaData.ngaArea.map{ $0.1 }.sorted{ $0.name < $1.name }, id: \.areaId) { nga in
                VStack {
                    HStack {
                        //NGA開始・終了ボタン
                        Button {
                            var newData = nga
                            newData.isRunning.toggle()
                            newData.passingCnt = 0

                            ngaData.editNgaArea(value: newData, type: checkRunning(isRunning: newData.isRunning))
                        } 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()

                        NgaMenuView(taskViewModel: taskViewModel, ngaData: ngaData, nga: nga)
                    }
                    .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()
        }
    }

    func checkRunning(isRunning: Bool) -> NgaOperation {
        var type = NgaOperation.Cancel
        if isRunning == true {
            type = NgaOperation.Running
        }
        return type
    }
}

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

    var body: some View {
        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 Task")
            }.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)
                }
            }
            Button("No"){}
        } message: {
            if let editNga = ngaData.editNga {
                Text("Delete " + editNga.name + " ?")
            }
        }
    }
}

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