MyConfirmViewController.swift 4.83 KB
import UIKit
import Photos

public class MyConfirmViewController: UIViewController {
    let imageView = UIImageView()
    var vBoard: Board!
    @IBOutlet weak var cancelButton: UIButton!
    @IBOutlet weak var confirmButton: UIButton!

    public var userData: Any?
    public var onComplete: CameraViewCompletion?
    var asset: PHAsset!

    public init(asset: PHAsset) {
        self.asset = asset
        super.init(nibName: "MyConfirmViewController", bundle: CameraGlobals.shared.bundle)
    }

    public override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.black
        imageView.contentMode = .scaleAspectFit
        view.insertSubview(imageView, at: 0)
        configUserData()

        guard let asset = asset else { return }
        let spinner = showSpinner()
        disable()
        _ = SingleImageFetcher()
                .setAsset(asset)
                .setTargetSize(largestPhotoSize())
                .onSuccess { image in
                    self.configureWithImage(image)
                    self.hideSpinner(spinner)
                    self.enable()
                }
                .onFailure { error in
                    self.hideSpinner(spinner)
                }
                .fetch()
    }

    fileprivate func configUserData() {
        if let boardObj = userData as? BoardObj, let shootItem = boardObj.shootItem, let ctruong = boardObj.cTruong, let singboard = ctruong.signboard {
            if (singboard > 0) {
                vBoard = Board()
                vBoard.translatesAutoresizingMaskIntoConstraints = false
                self.view.insertSubview(vBoard, at: 1)
                NSLayoutConstraint.activate([vBoard.topAnchor.constraint(equalTo: view.topAnchor),
                                             vBoard.leftAnchor.constraint(equalTo: view.leftAnchor),
                                             vBoard.rightAnchor.constraint(equalTo: view.rightAnchor),
                                             vBoard.bottomAnchor.constraint(equalTo: view.bottomAnchor)])
                vBoard.initData(ctruong: ctruong, shootItem: shootItem);
            }
        }
    }

    public override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        imageView.frame = view.frame
    }

    //region utils ========
    private func configureWithImage(_ image: UIImage) {
        buttonActions()
        imageView.image = image
        imageView.sizeToFit()
        view.setNeedsLayout()
    }

    private func buttonActions() {
        confirmButton.action = { [weak self] in self?.confirmPhoto() }
        cancelButton.action = { [weak self] in self?.cancel() }
    }

    internal func cancel() {
        onComplete?(nil, nil)
    }

    internal func confirmPhoto() {
        disable()

        imageView.isHidden = true
        let spinner = showSpinner()
        var fetcher = SingleImageFetcher()
                .onSuccess { image in
                    self.onComplete?(image, self.asset)
                    self.hideSpinner(spinner)
                    self.enable()
                }
                .onFailure { error in
                    self.hideSpinner(spinner)
                    self.showNoImageScreen(error)
                }
                .setAsset(asset)

        fetcher = fetcher.fetch()
    }

    func showSpinner() -> UIActivityIndicatorView {
        let spinner = UIActivityIndicatorView()
        spinner.activityIndicatorViewStyle = .white
        spinner.center = view.center
        spinner.startAnimating()

        view.addSubview(spinner)
        view.bringSubview(toFront: spinner)

        return spinner
    }

    func hideSpinner(_ spinner: UIActivityIndicatorView) {
        spinner.stopAnimating()
        spinner.removeFromSuperview()
    }

    func disable() {
        confirmButton.isEnabled = false
    }

    func enable() {
        confirmButton.isEnabled = true
    }

    func showNoImageScreen(_ error: NSError) {
        let permissionsView = PermissionsView(frame: view.bounds)

        let desc = localizedString("error.cant-fetch-photo.description")

        permissionsView.configureInView(view, title: error.localizedDescription, descriptiom: desc, completion: cancel)
    }

    public required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    public override var prefersStatusBarHidden: Bool {
        return true
    }

    public override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

    override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.landscape
    }
    //endregion
}

public class BoardObj {
    var cTruong: CongTruong?;
    var shootItem: ShootItem?;

    init(cTruong: CongTruong?, shootItem: ShootItem?) {
        self.cTruong = cTruong;
        self.shootItem = shootItem;
    }
}