AutoCat/AutoCat/AutoCatApp.swift

87 lines
2.7 KiB
Swift

//
// AutoCatApp.swift
// AutoCat
//
// Created by Selim Mustafaev on 20.04.2025.
// Copyright © 2025 Selim Mustafaev. All rights reserved.
//
import SwiftUI
import AutoCatCore
import SwiftLocation
import CoreLocation
@main
struct AutoCatApp: App {
@State var diReady: Bool = false
@State var settingsService: SettingsServiceProtocol?
var body: some Scene {
WindowGroup {
if diReady {
if settingsService?.user.token.isEmpty == false {
mainScreen
} else {
AuthScreen()
}
} else {
Text("")
.task {
try! await registerServices()
diReady = true
}
}
}
}
@ViewBuilder
var mainScreen: some View {
if UIDevice.isIPhone {
MainTabScreen()
} else {
MainSplitScreen()
}
}
func registerServices() async throws {
let container = ServiceContainer.shared
let settingsService = await SettingsService()
self.settingsService = settingsService
container.register(SettingsServiceProtocol.self, instance: settingsService)
let apiService = ApiService(settingsService: settingsService)
container.register(ApiServiceProtocol.self, instance: apiService)
let locationService = LocationService(
geocoder: CLGeocoder(),
locationManager: Location(),
settingsService: settingsService
)
container.register(LocationServiceProtocol.self, instance: locationService)
let storageService = try await StorageService(settingsService: settingsService)
container.register(StorageServiceProtocol.self, instance: storageService)
let vehicleService = VehicleService(apiService: apiService,
storageService: storageService,
locationService: locationService)
container.register(VehicleServiceProtocol.self, instance: vehicleService)
let audioRecordService = AudioRecordService()
container.register(AudioRecordServiceProtocol.self, instance: audioRecordService)
let vehicleRecordService = VehicleRecordService(
recordService: audioRecordService,
locationService: locationService,
settingsService: settingsService
)
container.register(VehicleRecordServiceProtocol.self, instance: vehicleRecordService)
container.register(RecordPlayerServiceProtocol.self, instance: RecordPlayerService())
}
}