//
//  AlertManager.swift
//  Sailassist
//
//  Created by 三浦薫巳 on 2023/11/19.
//

import Foundation
import UIKit
import AVFoundation

// 音声を扱うクラスのうち、アラートに関するもの
class AlertManager {
    // シングルトン宣言
    static let OnlyOne = AlertManager()
    private var player: AVAudioPlayer!     // ここでインスタンスを作ると例外発生

    var lastAlert: PushNotificationTypes.LocalPushIdentifier = .Reserve
    var lastSpeech: String = ""

    // 警報を鳴らす。引数の型定義はAlertDB.swift
    func VocalizeAlert( alertrec : WarnRecord ) {
        VocalizeAlert( alertrec: alertrec, identifier: .EcaSwitching)
    }

    func VocalizeAlert( alertrec : WarnRecord, identifier : PushNotificationTypes.LocalPushIdentifier ) {

        print(debug: "alertrec = \(alertrec)")
        // 警報を通知する
        let content = UNMutableNotificationContent()
        content.title = alertrec.title
        content.body  = alertrec.body
        content.categoryIdentifier = "alarm"
        content.userInfo = ["key": "map"]
        content.sound = UNNotificationSound.default

        // 「通知」を発生させる
        let request = UNNotificationRequest( identifier: identifier.rawValue, content: content, trigger: nil )
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

        lastAlert = identifier
    }

    // 警報の再生を中断する
    func CancelAlert() {
        CancelAlert(identifier : .EcaSwitching )
    }

    // 警報の再生を中断する
    func CancelAlert( identifier : PushNotificationTypes.LocalPushIdentifier ) {
        if let alertPlayer = player {
            if alertPlayer.isPlaying == true {
                if lastAlert == identifier {
                    alertPlayer.stop()
                }
            }
        }
        lastAlert = .Reserve
    }
}
