Proyectos de Subversion Iphone Microlearning

Rev

Autoría | Ultima modificación | Ver Log |

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

import Foundation
import SwiftUI
import AVKit


struct CardGalleryView: View {
    
    private var colorButtonLauncherBackGround = Color(UIColor(hex: Config.COLOR_BUTTON_GALLERY_LAUNCHER_BACKGROUND) ?? .gray)
    
    private var buttonShow : Bool = false
    private var buttonTitle : String = ""
   
    @ObservedObject private var viewModel = SlideCardViewModel()
    private var position = 0
    
    @State private var goToVideoPlayer : Bool = false
    //@State private var finalizeShow : Bool = false
    @State private var goToFinishCapsule : Bool = false
    @State private var goToFinishTopic : Bool = false
    

    
    
    
    init (slideUuid : String, position : Int) {
        let preference = Preference.sharedInstance
        self.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)
        self.position = 0
        


      
            
        self.buttonShow = false
        if self.viewModel.slide.type == Constants.SLIDE_TYPE_QUIZ  {
            self.buttonTitle = "Realizar test"
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {
            self.buttonTitle = "Ver video"
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_AUDIO   {
            self.buttonTitle = "Escuchar audio"
            self.buttonShow = true
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_DOCUMENT {
            self.buttonTitle = "Ver documento"
            self.buttonShow = true
        } else {
            self.buttonShow = false
        }
        
        /*
        if !self.viewModel.slide.background.isEmpty {
            self.created = Int(round(Date().timeIntervalSince1970))
            self.rand = Int.random(in: 0..<8999) + 1000
            self.token = preference.deviceUuid
            
            let password = preference.password
            let md5Data = MD5(string: "\(preference.password)" + ":" + "\(created)" + ":" + "\(rand)")
            self.secret =  md5Data.map {
                String(format: "%02hhx", $0)
            
            }.joined()
            //print(secret)
        }
        */
    }

    
    
    
    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
            
            //if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {
            NavigationLink("", destination: VideoPlayerView(slideModel: self.viewModel.slide, position:  self.position), isActive: self.$goToVideoPlayer).frame( height: 0)
            //}
            
            //if self.finalizeShow {
                
                NavigationLink("", destination: FinishCapsuleView(capsuleUuid: self.viewModel.slide.capsuleUuid), isActive: self.$goToFinishCapsule).frame( height: 0)
                
                NavigationLink("", destination: FinishTopicView(capsuleUuid: self.viewModel.slide.capsuleUuid), isActive: self.$goToFinishTopic).frame( height: 0)
            //}

            
     
            
            ZStack {
                
                
                if self.viewModel.slide.completed == 1  {
                
                    Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).alignmentGuide(.top, computeValue: { dimension in
                       10
                    }).offset(x: checkMarkX, y: checkMarkY).zIndex(10000)
                }
                
                
                
                
                if self.buttonShow {
                
                    Button(action: {
                        btnPlay()
                    }, label: {
                        Text(self.buttonTitle)
                        .font(.callout)
                            .foregroundColor(.black)
                       
                    })
              
                    .padding(.vertical, 15)
                    .padding(.horizontal, 10)
                    .background(colorButtonLauncherBackGround)
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
                    .offset(x: buttonX, y: buttonY)
                    .zIndex(10000)
                }
                
                if (self.viewModel.progressCapsule.progress >= 100 && self.viewModel.progressCapsule.completed == 0)
                    || (self.viewModel.progressTopic.progress >= 100 && self.viewModel.progressTopic.completed == 0) {
                    Button(action: {
                      
                       // let preference = Preference.sharedInstance
                        //let progressDao = ProgressDao()
                        //let progressTopic = progressDao.selectByTopicUuidAndUserUuid(topicUuid: self.viewModel.slide.topicUuid, userUuid: preference.userUuid)
                        
                        if self.viewModel.progressTopic.id > 0 && self.viewModel.progressTopic.progress >= 100 && self.viewModel.progressTopic.completed == 0 {
                            
                            self.goToFinishTopic = true
                            
                        } else {
                            
//let progressCapsule = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: self.viewModel.slide.capsuleUuid, userUuid: preference.userUuid)
                            
                            if self.viewModel.progressCapsule.id > 0 && self.viewModel.progressCapsule.progress >= 100 && self.viewModel.progressCapsule.completed == 0 {
                                
                                self.goToFinishCapsule = true
                            }
                            
                        }
                        
                        
                    }, label: {
                        Text("Finalizar")
                        .font(.callout)
                            .foregroundColor(.black)
                       
                    })
              
                    .padding()
                    .background(colorButtonLauncherBackGround)
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
                    .zIndex(10000)
                    
                }
                
                
                
                
                VStack {
                    Spacer()
                    
       
                    HStack {
                        if viewModel.slide.background.isEmpty && viewModel.slide.file.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 : self.viewModel.slide.background)!,
                                placeholder: {
                                    Spacer()
                                    Text("Cargando...").font(.footnote).foregroundColor(.black)
                                    Spacer()
                                    
                                },
                                image: {
                                    Image(uiImage: $0).resizable()
                                }
                            )
                        }
                    }.padding(.horizontal, 5)

                    Spacer()
                }
                .zIndex(500)
               

            
            } .onAppear {
                //print("CardGalleryView : \(self.viewModel.slide.name) " )
                
                self.goToVideoPlayer = false
                self.goToFinishCapsule = false
                self.goToFinishTopic = false
                
            } .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 {
                            
                            let preference = Preference.sharedInstance
                            self.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)
                        }
                    }
                }
            } .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_INCOMPLETED_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 {
                            

                        }
                    }
                }
            }
        }
    }
    
    private func btnPlay()
    {
        if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {
           self.goToVideoPlayer = true
        }
    }
    /*
    func MD5(string: String) -> Data {
        let length = Int(CC_MD5_DIGEST_LENGTH)
        let messageData = string.data(using:.utf8)!
        var digestData = Data(count: length)

        _ = digestData.withUnsafeMutableBytes { digestBytes -> UInt8 in
        messageData.withUnsafeBytes { messageBytes -> UInt8 in
        if let messageBytesBaseAddress = messageBytes.baseAddress, let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress {
                let messageLength = CC_LONG(messageData.count)
                    CC_MD5(messageBytesBaseAddress, messageLength, digestBytesBlindMemory)
                }
            return 0
            }
        }
        return digestData
    }*/
    
    
}

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