Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

//
//  CardGalleryView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 3/6/22.
//

import Foundation
import SwiftUI
import AVKit
import Network
import Alamofire
import SwiftyJSON
import TTGSnackbar

struct CardGalleryView: View {
    
    @EnvironmentObject private var networkMonitor : NetworkMonitor
    @EnvironmentObject private var appNavigation : AppNavigation
    @ObservedObject private var viewModel = GalleryCardViewModel()
    

    
    @State private var showGlobalAlert : Bool = false
    @State private var titleGlobalAlert : String = ""
    @State private var messageGlobalAlert : String = ""
    
    


    
    private var buttonShow : Bool = false
    private var buttonTitle : String = ""

    
    private let userUuid : String
    private var appData = Environment(\.appData).wrappedValue

    
    init (slideUuid : String) {
        userUuid = appData.userUuid
        viewModel.fetch(slideUuid: slideUuid, userUuid: userUuid)

        self.buttonShow = false
        if self.viewModel.slide.type == Constants.SLIDE_TYPE_QUIZ  {
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_QUIZ
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {
            self.buttonTitle =  Config.LANG_BUTTON_LAUNCH_VIDEO_PLAYER
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_AUDIO   {
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_AUDIO_PLAYER
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_DOCUMENT {
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_VIEW_PDF
            self.buttonShow = true
            
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_TEXT {
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_VIEW_TEXT
            self.buttonShow = true
        } else {
            self.buttonShow = false
        }
        
    }

    
    
    @ViewBuilder
    var body: some View {
        GeometryReader { geometry in
            let checkMarkX = (geometry.size.width - 50) / 2
            let checkMarkY = -1 * ((geometry.size.height - 50) / 2)
            
            let buttonX = (geometry.size.width - 180) / 2
           // let buttonY = (geometry.size.height - 80) / 2
            
            let buttonY = (geometry.size.height - 100) / 2
          
            ZStack {

                
                if self.viewModel.slide.completed == 1  {
                    Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).offset(x: checkMarkX, y: checkMarkY).zIndex(10000)
                }
                
                if self.buttonShow {
                
                    Button(action: {
                        btnPlay()
                    }, label: {
                        Text(self.buttonTitle)
                            .font(Font.custom(Config.FONT_NAME_BOLD, size: Config.FONT_SIZE_BUTTONS))
                        .foregroundColor(Color("color_button_gallery_foreground"))
                       
                    })
              
                    .padding(.vertical, 15)
                    .padding(.horizontal, 10)
                    .background(Color("color_button_gallery_background"))
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
                    .offset(x: buttonX, y: buttonY)
                    .zIndex(10000)
                }
                
                if (self.viewModel.progressCapsule >= 100 && self.viewModel.completedCapsule == 0)
                    || (self.viewModel.progressTopic >= 100 && self.viewModel.completedTopic == 0) {
                    Button(action: {
                        if self.viewModel.progressTopic >= 100 && self.viewModel.completedTopic == 0 {
                        
                            appNavigation.subpageActive = .finishtopic
                            
                        } else {
                            if self.viewModel.progressCapsule >= 100 && self.viewModel.completedCapsule == 0 {
                                appNavigation.subpageActive = .finishcapsule
                            }
                        }
                    }, label: {
                        Text(Config.LANG_BUTTON_FINISH_CAPSULE_OR_TOPIC)
                        .font(.callout)
                        .foregroundColor(.black)
                    })
                    .padding()
                    .background(Color("color_button_gallery_background"))
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
                    .zIndex(10000)
                }
               
                VStack {
                
                    
                    
                    Spacer()
                    HStack {
                        if viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && viewModel.slide.file.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
                            Image(uiImage: UIImage(named: "logo") ?? UIImage())
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                        } else {
                            CustomAsyncImage(
                                url: URL(string: self.viewModel.slide.type == Constants.SLIDE_TYPE_IMAGE
                                         ? self.viewModel.slide.file.trimmingCharacters(in: .whitespacesAndNewlines)
                                         : self.viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines))!,
                                placeholder: {
                                    Spacer()
                                    Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)
                                    Spacer()
                                },
                                image: {
                                    Image(uiImage: $0).resizable()
                                }
                            )
                        }
                    }.padding(.horizontal, 5)

                    Spacer()
                }
               // .zIndex(500)
              
            }.onAppear {
                /*
                if self.viewModel.slide.type  == Constants.SLIDE_TYPE_IMAGE
                {
                    
                    let dataService = DataService()
                    dataService.completeSlide(slide: self.viewModel.slide)
                }*/
                self.viewModel.fetchProgress(slideUuid: self.viewModel.slide.uuid, userUuid: self.userUuid)
            }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE))
            { data in
               // print("CardGalleryView  Receive " )
                if data.userInfo != nil {
                    if let slideUuid = data.userInfo?["slideUuid"]! as? String {
                        if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {
                            self.viewModel.fetchProgress(slideUuid: slideUuid, userUuid: appData.userUuid)
                        }
                    }
                }
             }
             .alert(isPresented: $showGlobalAlert) {
                Alert(
                    title: Text(self.titleGlobalAlert),
                    message: Text(self.messageGlobalAlert),
                    dismissButton: .default(Text(Config.LANG_COMMON_OK))
                )
            }
        }
    }
    
    private func btnPlay()
    {
        
        switch self.viewModel.slide.type
        {
            case Constants.SLIDE_TYPE_TEXT :
                appNavigation.pageActive = .webviewer
                break;
            
            case Constants.SLIDE_TYPE_QUIZ :
                let snackbar = TTGSnackbar(message: "Por implementar", duration: .long)
                snackbar.show()
                break;
            
            default :
                appNavigation.pageActive = .download
                break;
        }
        
        
        
    }
    
   
}

struct CardGalleryView_Previews: PreviewProvider {
    static var previews: some View {
        CardGalleryView(slideUuid: "S123")
    }
    
}