CellMucChupWithCamera.swift 7.28 KB
import Foundation
import UIKit
import GeneralUtils
import Alamofire

class CellMucChupWithCamera: BaseTableViewCellUI {
    var tvTitle: UILabel!, imv: UIImageView!
    var shootItem: ShootItem!

    static func registerClass(tableView: UITableView, forCellReuseIdentifier: String) {
        tableView.register(CellMucChupWithCamera.self, forCellReuseIdentifier: forCellReuseIdentifier)
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        initView()
    }

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

    private func initView() {
        let stackView = UIStackView()
        stackView.axis = UILayoutConstraintAxis.horizontal
        stackView.translatesAutoresizingMaskIntoConstraints = false
        self.contentView.addSubview(stackView)
        NSLayoutConstraint.activate([stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8),
                                     stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 8),
                                     stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -8),
                                     stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8)])
        tvTitle = UILabel()
        tvTitle.numberOfLines = 0
        stackView.addArrangedSubview(tvTitle)
        tvTitle.isUserInteractionEnabled = true
        let tapTitle = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.titleClick))
        tvTitle.addGestureRecognizer(tapTitle)

        imv = UIImageView()
        imv.contentMode = .scaleAspectFit
        imv.isUserInteractionEnabled = true
        stackView.addArrangedSubview(imv)
        imv.widthAnchor.constraint(equalToConstant: 80).isActive = true
        imv.heightAnchor.constraint(equalToConstant: 60).isActive = true
        imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic")
        let tap = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.btnImvClick))
        imv.addGestureRecognizer(tap)
    }

    func titleClick() {
        guard let viewController = self.viewController as? VCShootItemList else { return }
        let cTruong = viewController.cTruong;
        if let imgs = shootItem.imgs, imgs.count > 0 {
            VCPageImgs.openController(viewController, imgObjs: imgs, cTruong: cTruong!, shootItem: self.shootItem);
        }
    }

    func btnImvClick() {
        guard let viewController = self.viewController as? VCShootItemList else { return }
//        if let imgs = shootItem.imgs, imgs.count > 0 {
//            DialogUtils.showQuestion(titleParam: <#T##String?##Swift.String?#>, messageParam: <#T##String?##Swift.String?#>, type: <#T##TypeDialog##GeneralUtils.TypeDialog#>, yesTitle: <#T##String##Swift.String#>, noTitle: <#T##String##Swift.String#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>)
//        }
        let cTruong = viewController.cTruong;
        let userData = BoardObj(cTruong: cTruong, shootItem: self.shootItem);

        let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true, userData: userData) { image, asset in
            viewController.dismiss(animated: true, completion: nil)
            guard let image = image else { return }
            self.imv?.image = image
            guard let id = self.shootItem.id, let data = UIImageJPEGRepresentation(image, 1.0) else { return }
            let signboard = self.shootItem?.signboard ?? 1

            self.uploadImage(id: id, signboard: signboard, date: self.shootItem?.date, note: self.shootItem.note, data: data)
        }

        viewController.present(cameraViewController, animated: true, completion: nil)
    }

    override func configCellWithData(baseObj: Any, index: Int) {
        super.configCellWithData(baseObj: baseObj, index: index)
        shootItem = baseObj as! ShootItem
        tvTitle.text = shootItem.name
        if let imgs = shootItem.imgs, imgs.count > 0, let imgUrl = imgs[0].url {
            setImageUrl(imv: imv, imageUrl: imgUrl)
        } else {
            imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic")
        }
    }

    //region upload =======
    //TODO: Them 2 field date: String, note: String?
    fileprivate func uploadImage(id: Int, signboard: Int, date: Double?, note: String?, data: Data) {
        let tvProgress = SwiftOverlays.showBlockingWaitOverlayWithText(LocalizedString("Uploading") + ".....")
        Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in
            multipartFormData.append(data, withName: "file", fileName: "file_\(DataTypeUtils.getCurrentTimeSecond()).jpg", mimeType: "image/jpeg")
            multipartFormData.append("\(id)".data(using: String.Encoding.utf8)!, withName: "idShooting")
            multipartFormData.append("\(signboard)".data(using: String.Encoding.utf8)!, withName: "signboard")
            if let note = note {
                multipartFormData.append(note.data(using: String.Encoding.utf8)!, withName: "note")
            }
            if let date = date {
                let dateInt = Int(date)
                println("Upload: date: \(dateInt)")
                multipartFormData.append("\(dateInt)".data(using: String.Encoding.utf8)!, withName: "date")
            }
        }, to: Constants.PathManager.ROOT_SERVER + "api/board/store", method: .post, encodingCompletion: { (encodingResult: SessionManager.MultipartFormDataEncodingResult) in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.uploadProgress(closure: { progress in
                            CommonUtils.excuteOnMainThread({ tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%") })
                        })
                        .responseString { response in
                            SwiftOverlays.removeAllBlockingOverlays()
                            debugPrint("SUCCESS RESPONSE: \(response.result.value)")
                            if let value = response.result.value {
                                let json = JSON.parse(value)
                                if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string {
                                    self.shootItem.addImg(img: ImgObj(url: url, signboard: signboard, date: nil, note: nil))
                                    CommonUtils.showToastLong(text: LocalizedString("successful"))
                                    return
                                }
                            }
                            self.handleError()
                        }
            case .failure(let encodingError):
                SwiftOverlays.removeAllBlockingOverlays()
                self.handleError()
                print("ERROR RESPONSE: \(encodingError)")
            }
        })
    }

    fileprivate func handleError() {
        //DialogUtils.showQuestion(messageParam: <#T##String?##Swift.String?#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>)
    }
    //endregion
}