import BusX
import Combine
import MeetupIdX
import MicX
import SwiftUI
import UIKit

struct Content: View {
  @State private var selectedId = "1"
  var ids = ["1", "2", "3", "4"]
  var body: some View {
    VStack {
      HStack {
        Text("MicItem id:")
        Picker("", selection: $selectedId) {
          ForEach(ids, id: \.self) {
            Text($0)
          }
        }
      }
        .pickerStyle(.segmented)
      Divider()
        .padding()
      MicItem.V(selectedId)
      Divider()
        .padding()
      List {
        ForEach(ids, id: \.self) {
          Text("\($0): TODO state")
        }
      }
    }
      .padding()
  }
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
  let meetupIS = MeetupId.Service(.init())
  let micS = Mic.Service(.init())
  var window: UIWindow?

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    let vc = UIViewController()
    addSwiftUIViewAsChild(swiftUIView: Content(), parent: vc.view)
    vc.view.backgroundColor = .white
    window?.rootViewController = vc
    window?.backgroundColor = UIColor.white
    window?.makeKeyAndVisible()

    /**/print("ИГР App.didFLWO")
    //testMic1()
    //testMic2()
    //testMic2_id("1")
    /*
    DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
      self.testMic2_id("2")
    }
    */
    testMic4()
    return true
  }
  
  func testMic1() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
      Bus.send(Mic.K.isActive, true)
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
      Bus.send(Mic.K.isActive, false)
    }
  }

  func testMic2() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
      Bus.send(Mic.K.activityDate, Date() + 2)
    }

    DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
      Bus.send(Mic.K.activityDate, Date() + 2)
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 6) {
      Bus.send(Mic.K.activityDate, Date() + 7)
    }
  }

  var subscriptions = [AnyCancellable]()
  func testMic2_id(_ id: String) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
      Bus.send(Bus.keyId(Mic.K.activityDate, id), Date() + 2)
    }

    DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
      Bus.send(Bus.keyId(Mic.K.activityDate, id), Date() + 2)
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 6) {
      Bus.send(Bus.keyId(Mic.K.activityDate, id), Date() + 3)
    }
  }
    
  func testMic4() {
    let ad1 = [
      "1": Date().addingTimeInterval(3),
      "2": Date().addingTimeInterval(5),
    ]
    Bus.send(Mic.K.activityDates, ad1)

    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
      let ad2 = [
        "1": Date().addingTimeInterval(3),
        "4": Date().addingTimeInterval(5),
      ]
      Bus.send(Mic.K.activityDates, ad2)
    }
  }
}