//
//  ContentView.swift
//  LiveApple
//
//  Created by Shadowfacts on 9/24/22.
//

import SwiftUI
import AVFoundation
import ActivityKit
import BackgroundTasks
import MediaPlayer

struct ContentView: View {
    @Environment(\.scenePhase) private var scenePhase
    let controller: PlayerController?
    
    var body: some View {
        VStack(spacing: 16) {
            Spacer()
            
            if let controller {
                ControllerView(controller: controller)
            } else {
                Text("no controller")
            }
            
            Spacer()
        }
        .onChange(of: scenePhase) { newValue in
            if newValue == .active {
                try! AVAudioSession.sharedInstance().setCategory(.playback)
                try! AVAudioSession.sharedInstance().setActive(true)
            }
        }
    }
}

struct ControllerView: View {
    @ObservedObject var controller: PlayerController
    @State var hasStarted = false
    
    var body: some View {
        PlayerView(player: controller.player)
            .onChange(of: controller.currentFrame) { frame in
                guard let frame else {
                    return
                }
                
                guard !hasStarted else {
                    return
                }
                hasStarted = true
                
                let state = BadAppleAttributes.ContentState(frame: frame)
                let attributes = BadAppleAttributes()

                let activity = try! Activity.request(attributes: attributes, contentState: state)
                controller.activity = activity
                print(activity)
                
                do {
                    try BGTaskScheduler.shared.submit(BGProcessingTaskRequest(identifier: "task"))
                } catch {
                    fatalError("submitting task: \(error)")
                }
                // lol
                BGTaskScheduler.shared.perform(Selector(("_simulateLaunchForTaskWithIdentifier:")), with: "task")
            }
        
        if let frame = controller.currentFrame {
            FrameView(frame: frame)
        } else {
            Rectangle()
                .fill(.black)
                .frame(width: 60 / UIScreen.main.scale, height: 45 / UIScreen.main.scale)
        }
    }
}
