import SwiftUI
import Adamantium

struct ContentView: View {
    
    enum DemoType: String, Identifiable {
        var id: String {
            return rawValue
        }
        case liveCamera
        case realTimeRender
        case videoWatermarking
        case imageToVideoGenerator
        case auraView
        
        var displayLabel: String {
            switch self {
            case .auraView:
                return "Aura View"
            case .liveCamera:
                return "Live Camera"
            case .realTimeRender:
                return "Real Time Render"
            case .videoWatermarking:
                return "Video Watermarking"
            case .imageToVideoGenerator:
                return "Image to Video Generator"
                
            }
        }
    }
    
    @State private var demo: DemoType = .auraView
    
    init () {
        Adamantium.setupGlobals()
        auraCoordinator = AuraView.Coordinator()
    }
    
    var body: some View {
        ZStack {
            switch demo {
            case .auraView:
                auraView
            case .liveCamera:
                liveCamera
            case .realTimeRender:
                realtimeRender
            case .videoWatermarking:
                videoWatermarking
            case .imageToVideoGenerator:
                imageToVideoGenerator
            }
        }
    }
    
    @ObservedObject private var auraCoordinator = AuraView.Coordinator()
    
    @ViewBuilder
    var auraView: some View {
        AuraView(
            auraCoordinator,
            colorSet: .custom(
                .custom(0.129411764705882, 0.098039215686275, 0.474509803921569),
                .custom(0.435294117647059, 0.098039215686275, 0.631372549019608),
                .custom(0.647058823529412, 0.270588235294118, 0.356862745098039)
            ),
            morphSpeed: 0.1,
            scale: 1.0,
            seed: 100.0
        )
    }
    
    @ViewBuilder
    var liveCamera: some View {
        GeometryReader { geoProxy in
            ZStack {
                Color.clear
                LiveCameraDemoView(
                    width: geoProxy.size.width,
                    height: geoProxy.size.height)
            }
        }
    }
    
    @ViewBuilder
    var realtimeRender: some View {
        RealtimeRenderDemoView()
            .ignoresSafeArea()
    }
    
    @ViewBuilder
    var videoWatermarking: some View {
        VideoWatermarkingDemoView()
            .ignoresSafeArea()
    }
    
    @ViewBuilder
    var imageToVideoGenerator: some View {
        ImageToVideoGeneratorDemoView()
            .ignoresSafeArea()
    }
}
