//
//  AppDelegate.swift
//  Feels (iOS)
//
//  Created by Trey Tartt on 1/10/22.
//

import Foundation
import UserNotifications
import UIKit
import WidgetKit
import SwiftUI

class AppDelegate: NSObject, UIApplicationDelegate {
    private let savedOnboardingData = UserDefaultsStore.getOnboarding()

    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
//        PersistenceController.shared.clearDB()
        UNUserNotificationCenter.current().delegate = self
        return true
    }
}

extension AppDelegate: UNUserNotificationCenterDelegate {
    func requestAuthorization() {  }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.badge, .banner, .sound])
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        if let action = LocalNotification.ActionType(rawValue: response.actionIdentifier) {
            var date: Date
            
            switch savedOnboardingData.inputDay {
            case .Today:
                date = Date()
            case .Previous:
                date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
            }
            
            
            switch action {
            case .horrible:
                PersistenceController.shared.add(mood: .horrible, forDate: date)
            case .bad:
                PersistenceController.shared.add(mood: .bad, forDate: date)
            case .average:
                PersistenceController.shared.add(mood: .average, forDate: date)
            case .good:
                PersistenceController.shared.add(mood: .good, forDate: date)
            case .great:
                PersistenceController.shared.add(mood: .great, forDate: date)
            }
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
        WidgetCenter.shared.reloadAllTimelines()
        completionHandler()
    }
}
