CouponBarcodeView.swift 15.2 KB
//
//  CouponBarcodeView.swift
//  WarplySDKFrameworkIOS
//
//  Created by Manos Chorianopoulos on 21/4/22.
//

#if canImport(SwiftUI)
import SwiftUI
import Combine
import Foundation
import UIKit
//import RSBarcodes_Swift
//import AVFoundation


extension CouponBarcodeView {
    struct headerView: View {
        var goBack: () -> ()
        
        var uiscreen = UIScreen.main.bounds
        
        var body: some View {
            HStack(alignment: .center) {
                Button {
                    // Button Action
                    goBack()
                } label: {
                    Image("ic_back", bundle: Bundle(for: MyEmptyClass.self))
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02)
                }
               
                Text("Εκπτωτικό κουπόνι")
                    .fontWeight(.medium)
                    .font(.system(size: 16))
                    .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196))
                    .multilineTextAlignment(.center)
                    .frame(maxWidth: .infinity)
                    .padding(.horizontal)
               
            }
            .frame(maxWidth: .infinity)
            .padding(.horizontal)
            .padding(.vertical, 10)
        }
    }
    
    struct couponContainer: View {
        @State var coupon: Dictionary<String, Any>
//        @State var couponset:CouponSetItemModel
        
        var uiscreen = UIScreen.main.bounds
        
        
        static func convertDateFormat(inputDate: String) -> String {
             let dateFormatter = DateFormatter()
             dateFormatter.dateFormat = "yyyy-MM-dd hh:mm"
            if let date = dateFormatter.date(from: inputDate) {
                dateFormatter.dateFormat = "dd/MM/yyyy"
                let resultString = dateFormatter.string(from: date)
                return resultString
             } else {
                 return ""
             }
        }
        
        
        func generateBarcode(from string: String) -> Image? {
            
            let data = string.data(using: String.Encoding.ascii)

            if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
                filter.setValue(data, forKey: "inputMessage")
//                let transform = CGAffineTransform(scaleX: 3, y: 3)
                

//                if let output = filter.outputImage?.transformed(by: transform) {
                if let output = filter.outputImage {
                    
//                    // Change the color using CIFilter
//                    let colorParameters = [
//                        "inputColor0": CIColor(color: UIColor.black), // Foreground
//                        "inputColor1": CIColor(color: UIColor.clear) // Background
//                    ]
//                    let colored = output.applyingFilter("CIFalseColor", parameters: colorParameters)
                    let image = Image(uiImage: UIImage(ciImage: output))
                    
//                    return UIImage(ciImage: output)
                    return image
                }
            }

            return nil
        }

        
        var body: some View {
            GeometryReader { geometry in
                ScrollView(showsIndicators: false) {
                    VStack(alignment: .leading) {
                        
                        ImageView(withURL: coupon["img_preview"] as? String ?? "")
                        
                        VStack(alignment: .leading) {
                            Text(coupon["name"] as? String ?? "")
                                .fontWeight(.bold)
                                .font(.system(size: 16))
                                .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                .multilineTextAlignment(.leading)
                                .padding(.horizontal)
                                .padding(.top, self.uiscreen.height * 0.04)
                            
                            Text(coupon["short_description"] as? String ?? "")
                                .fontWeight(.regular)
                                .font(.system(size: 14))
                                .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                .multilineTextAlignment(.leading)
                                .padding(.horizontal)
                                .padding(.top, self.uiscreen.height * 0.02)
                            
                            Text("Κωδικός Κουπονιού")
                                .fontWeight(.medium)
                                .font(.system(size: 16))
                                .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                .multilineTextAlignment(.center)
                                .padding(.top, self.uiscreen.height * 0.05)
                                .padding(.horizontal)
                                .frame(maxWidth: .infinity)
                            
                            VStack(alignment: .center) {
                                VStack {
                                    Text("1A2C378")
                                        .fontWeight(.bold)
                                        .font(.system(size: 27))
                                        .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                        .multilineTextAlignment(.center)
                                        .padding(.horizontal)
                                        .padding(.vertical, 10)
//                                        .padding(.all)
                                }
                                .frame(width: self.uiscreen.width * 0.8)
                                .background(Color(red: 0.9333333333333333, green: 0.9686274509803922, blue: 1.0))
                                .cornerRadius(10)
                            }
                            .frame(maxWidth: .infinity)
                            
                            if (CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: "123456789101112"))) {
                                VStack(alignment: .center) {
                                    VStack {}
                                        .frame(height: 1)
                                        .frame(width: self.uiscreen.width * 0.9)
                                        .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255))
                                }
                                .frame(maxWidth: .infinity)
                                .padding(.top, self.uiscreen.height * 0.015)
                                
                                // TODO: Add the barcode
//                                generateBarcode(from: "1234567891234")
//                                ?
//                                    .resizable()
//                                    .aspectRatio(contentMode: .fit)
//                                    .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.1)
                                
                                Text("123456789101112")
                                    .fontWeight(.regular)
                                    .font(.system(size: 22))
                                    .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                    .multilineTextAlignment(.center)
                                    .padding(.vertical, self.uiscreen.height * 0.01)
                                    .padding(.horizontal)
                                    .frame(maxWidth: .infinity)
                                
                                
                                VStack(alignment: .center) {
                                    VStack {}
                                        .frame(height: 1)
                                        .frame(width: self.uiscreen.width * 0.9)
                                        .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255))
                                }
                                .frame(maxWidth: .infinity)
                            }
                            
                            
                            
                            Text("Το κουπόνι ισχύει έως " + CouponBarcodeView.couponContainer.convertDateFormat(inputDate: coupon["expiration"] as? String ?? ""))
                                .fontWeight(.medium)
                                .font(.system(size: 14))
                                .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                .multilineTextAlignment(.center)
                                .padding(.top, self.uiscreen.height * 0.03)
                                .padding(.horizontal)
                                .frame(maxWidth: .infinity)
                        }
                        .frame(width:self.uiscreen.width)
                    
                        
                        
                        Spacer()
                        
                        VStack(alignment: .center) {
                            Button {
                                // Button Action
                                print("Send Gift Button tapped!")
                            } label: {
                                HStack {
                                    Text("Κάντο δώρο!")
                                        .fontWeight(.medium)
                                        .font(.system(size: 16))
                                        .foregroundColor(Color(red: 0.3137254901960784, green: 0.6196078431372549, blue: 0.1843137254901961))
                                        .multilineTextAlignment(.center)
                                        .padding(.all)
                                    
                                    // TODO: Add gift icon
                                }
                                .frame(maxWidth: .infinity)
                            }
                            .frame(width: self.uiscreen.width * 0.8)
                            .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255))
                            .cornerRadius(7)
                        }
                        .frame(maxWidth: .infinity)
                        .padding(.top, self.uiscreen.height * 0.05)
                        
//                        VStack(alignment: .center) {
//                            Button {
//                                // Button Action
//                                print("Shops Map Button tapped!")
//                            } label: {
//                                HStack {
//                                    Text("Χάρτης Καταστημάτων")
//                                        .fontWeight(.medium)
//                                        .font(.system(size: 16))
//                                        .foregroundColor(Color.white)
//                                        .multilineTextAlignment(.center)
//                                        .padding(.all)
//                                }
//                                .frame(maxWidth: .infinity)
//                            }
//                            .frame(width: self.uiscreen.width * 0.8)
//                            .background(Color(red: 0.4745098039215686, green: 0.7490196078431373, blue: 0.0784313725490196))
//                            .cornerRadius(7)
//                        }
//                        .frame(maxWidth: .infinity)
//                        .padding(.top, self.uiscreen.height * 0.015)
                        
                        Button {
                            // Button Action
                            print("Terms Button tapped!")
                        } label: {
                            Text("Όροι χρήσης")
                                .fontWeight(.medium)
                                .font(.system(size: 14))
                                .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
                                .underline()
                                .multilineTextAlignment(.center)
                                .padding(.top, self.uiscreen.height * 0.025)
                                .padding(.bottom, self.uiscreen.height * 0.03)
                                .padding(.horizontal)
                                .frame(maxWidth: .infinity)
                        }
                        .frame(maxWidth: .infinity)
                        
                    
                    }
                    .frame(width:self.uiscreen.width)
                    .frame(minHeight: geometry.size.height)
                    .padding(.bottom, self.uiscreen.height * 0.03)
                }
                .frame(width:self.uiscreen.width)
                .frame(maxHeight: .infinity)
            }
            .frame(width:self.uiscreen.width)
            .frame(maxHeight: .infinity)
        }
    }
    
    struct ImageView: View {
        @ObservedObject var imageLoader:UrlImageModel
        
        var uiscreen = UIScreen.main.bounds

        init(withURL url:String) {
            imageLoader = UrlImageModel(urlString:url)
        }

        var body: some View {
            
            Image(uiImage: imageLoader.image ?? UIImage())
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.25)
        }
    }
    
}

@available(iOS 13.0.0, *)
struct CouponBarcodeView: View {
    var parentView: UIView
    var coupon: Dictionary<String, Any>
    @State var couponset: CouponSetItemModel?
    
    var uiscreen = UIScreen.main.bounds
    
    func goBack() {
        for subview in parentView.subviews {
            if(subview.tag == 7) {
                subview.removeFromSuperview()
            }
        }
    }
    
    
    var body: some View {
        VStack {
            headerView(goBack: goBack)
            
            VStack {
                couponContainer(coupon: coupon)
             }
            .background(Color.white)
            .cornerRadius(30, corners: [.topLeft])
            .frame(width:self.uiscreen.width)
            .frame(maxHeight: .infinity)
        }
        .edgesIgnoringSafeArea([.bottom])
        .frame(width:self.uiscreen.width)
        .frame(maxHeight: .infinity)
//        .onAppear {
//            // If you want to setup data with model
//            couponset = CouponSetItemModel(dictionary: coupon)
//
//        }
    }
}
#endif

//struct CouponBarcodeView_Previews: PreviewProvider {
//    static var previews: some View {
//        CouponBarcodeView()
//    }
//}