// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import Foundation
import BackgroundTasks

func submitBGTaskRequest(_ request: BGTaskRequest) -> Bool {
  do {
    try BGTaskScheduler.shared.submit(request)
    flutter_log("INFO","Successfully scheduled task \(request.identifier)")
    return true
  } catch {
    flutter_log("WARNING","Unable to schedule task \(request.identifier): \(error)")
    return false
  }
}

func scheduleBGProcessingTask(identifier: String, requiresExternalPower: Bool, requiresNetworkConnectivity: Bool) -> Bool {
  let request = BGProcessingTaskRequest(identifier: identifier)
  request.requiresExternalPower = requiresExternalPower
  request.requiresNetworkConnectivity = requiresNetworkConnectivity
  return submitBGTaskRequest(request)
}

func scheduleBGAppRefreshTask(identifier: String) -> Bool {
  let request = BGAppRefreshTaskRequest(identifier: identifier)
  return submitBGTaskRequest(request)
}

func cancelBGTask(identifier: String) {
  BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: identifier);
}
