//
//  GetNgaList.swift
//  Sailassist
//
//  Created by 三浦薫巳 on 2024/06/15.
//

import Foundation
import SwiftUI
import CoreLocation

class GetNgaList {
    @ObservedObject var ngaData = SharingData.nga
    var sessionNgaList = SessionNgaList()

    func start() {
        print(debug: "called")
        sessionNgaList.RequestGetNgaList(responseGetNgaList)
    }

    private func responseGetNgaList(result: Result<Data, APIError>) {
        print(debug: "called")
        switch result {
        case .success(let resultData):
            let serverSession = ServerSession()
            let resjson = serverSession.fromJSON(resultData: resultData, resltType: [ReqNgaList].self)
            if let res = resjson {
                var ngaAreas = ngaData.ngaArea
                for ngaList in res {
                    if let id = NSUUID(uuidString: ngaList.id) {
                        if var nga = ngaAreas[id as UUID] {
                            if let name = ngaList.name {
                                nga.name = name
                            }
                            nga.isLock = ngaList.lock
                            nga.points.removeAll()
                            for pos in ngaList.geometry{
                                let point = CLLocationCoordinate2D(latitude: pos.lat!, longitude: pos.lon!)
                                nga.points.append(point)
                            }
                            ngaAreas.updateValue(nga, forKey: nga.areaId)
                        } else {
                            if var nga = RegisteredNga(areaName: "test dammy") {    //TODO: 名称はダミー
                                nga.areaId = id as UUID
                                if let name = ngaList.name {
                                    nga.name = name
                                }
                                nga.isLock = ngaList.lock
                                nga.isRunning = ngaList.enabled
                                if !ngaList.enabled {
                                    nga.passingCnt = 0
                                }
                                nga.color = Color.green.description
                                for pos in ngaList.geometry{
                                    let point = CLLocationCoordinate2D(latitude: pos.lat!, longitude: pos.lon!)
                                    nga.points.append(point)
                                }
                                ngaAreas.updateValue(nga, forKey: nga.areaId)
                            }
                        }
                    }
                    for ares in ngaAreas {
                        ngaData.setNgaArea(key: ares.value.areaId, value: ares.value)
                    }
                }
            }
        case .failure(let errorCode):
            print(debug: errorCode)
            break
        }
    }
}
