ActivityTableViewCell.swift 7.58 KB
//
//  ActivityTableViewCell.swift
//  styleteqios
//
//  Created by Alfonz Montelibano on 4/20/16.
//  Copyright © 2016 Allejo Chris Velarde. All rights reserved.
//

import UIKit

protocol ActivityTableViewCellDelegate {
    func shouldRefreshCell(_ cell: ActivityTableViewCell)
    
    func pushController(_ viewController: UIViewController)
    func shouldRedirectToProfile(_ username: String)
    func didTapHashTag(_ hashtag: String)
}

class ActivityTableViewCell: UITableViewCell {

    @IBOutlet weak var primaryImageHeight: NSLayoutConstraint!
	@IBOutlet weak var activityUserImage: UIImageView!
	@IBOutlet weak var activityImage: UIImageView!
	@IBOutlet weak var activityUserNameLabel: UILabel!
	@IBOutlet weak var activityDescriptionLabel: UILabel!
	@IBOutlet weak var activityDateLabel: UILabel!
    
    @IBOutlet weak var numberOfLIkesUIView: UIView!
    @IBOutlet weak var numberOfLikesUIButton: UIButton!
    
    var delegate: ActivityTableViewCellDelegate?
    	
	var activityItem: Activity?
    var adjustedSize: CGSize?
	
    override func awakeFromNib() {
        super.awakeFromNib()
        self.activityDateLabel.isHidden = true
    }
    
    override func prepareForReuse() {
        self.resetCommonElements()
        self.primaryImageHeight.constant = 0
        
    }
	
    func resetCommonElements()
    {
        self.activityUserImage.image = UIImage(named: "default-image")
        self.activityDateLabel.text = ""
        self.activityUserNameLabel.text = ""
        self.activityDescriptionLabel.text = ""
        
    }
    
    func loadDefaultImage() {
        
        guard let targetImageView = self.activityImage else {
            return
        }
        
        let defaultImage = UIImage(named: "default-image-transparent")
        targetImageView.image = defaultImage
        targetImageView.contentMode = .scaleAspectFill
        // set default size to square
        self.primaryImageHeight.constant = UIScreen.main.bounds.size.width
        
    }
	
	
	open func loadActivityItem(_ activityItem: Activity){
		self.activityItem = activityItem
		loadCommonDetails()
        
        if (self.activityItem as? NotificationEntity) != nil {
            self.primaryImageHeight.constant = 0
        }
        
        // display and update number of likes of a photo
        if let activityType = self.activityItem?.activityType.rawValue {
            switch activityType {
                case "Style":
                    let style = self.activityItem?.object as! Style
                    self.updateLikesCountAndIcon(isLiked: style.isLikedByCurrentUser)
                    self.numberOfLIkesUIView.isHidden = false
                case "Special":
                    return
                default:
                    self.numberOfLIkesUIView.isHidden = true
            }
            
        }
        
        if activityItem.withImage {
            
            self.activityImage.contentMode = .scaleAspectFit
            self.primaryImageHeight.constant = 0
            WebImageHelper.instance.loadFromUrlString((self.activityItem?.imageUrl)!, imageView: self.activityImage) { (loadedImage) in
                guard let targetImage = loadedImage else {
                    return
                }
                
                let adjustedSize = targetImage.getScreenAspectSize(UIScreen.main.bounds.size)
                self.primaryImageHeight.constant = adjustedSize.height
            }
        }
        else {
            
            self.loadDefaultImage()
            
            
        }
	}
    
    func loadCommonDetails() {
        
        let usernameTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.presentUserProfile(tapGestureRecognizer:)))
        let userImageTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.presentUserProfile(tapGestureRecognizer:)))
        
        // Set activity details
        self.activityUserNameLabel.text = self.activityItem?.getUserName()
        self.activityUserNameLabel?.isUserInteractionEnabled = true
        self.activityUserNameLabel.addGestureRecognizer(usernameTapRecognizer)
        self.activityUserImage.backgroundColor = UIColor.white
        
        if let rawDescription = self.activityItem?.description, let rawDateString = self.activityItem?.getDate() {
            let attributedDescription = NSMutableAttributedString(string: "\(rawDescription) ", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 12)])
            attributedDescription.append(NSAttributedString(string: rawDateString, attributes: [NSAttributedString.Key.font: UIFont.italicSystemFont(ofSize: 10), NSAttributedString.Key.foregroundColor: UIColor.lightGray]))
            self.activityDescriptionLabel.attributedText = attributedDescription            
        }
        else {
            self.activityDescriptionLabel.text = ""
        }
        
        
        // Set the profile pic image of the user/owner of this activity
        if let url = self.activityItem?.getUserImageUrl() {
            if url.isEmpty == false {
                WebImageHelper.instance.loadFromUrlString(url, imageView: self.activityUserImage) { _ in
                    
                    self.activityUserImage?.isUserInteractionEnabled = true
                    self.activityUserImage.addGestureRecognizer(userImageTapRecognizer)
                }
            }
        }
        else {
            self.activityUserImage.image = #imageLiteral(resourceName: "default-icon")
            self.activityUserImage?.isUserInteractionEnabled = false
            self.activityUserNameLabel?.isUserInteractionEnabled = false
        }
    }
    
    @objc func presentUserProfile(tapGestureRecognizer: UITapGestureRecognizer)
    {
        if let userId = self.activityItem?.getUserId() {
            
            self.activityUserNameLabel.isUserInteractionEnabled = false
            self.activityUserImage.isUserInteractionEnabled = false
                        
            UserRepository.instance.findById(userId) { (user, error) in
        
                self.activityUserNameLabel.isUserInteractionEnabled = true
                self.activityUserImage.isUserInteractionEnabled = true
                
                let storyboard = UIStoryboard(name: "Search", bundle: nil)
                let controller = storyboard.instantiateViewController(withIdentifier: "SearchProfileDetailController") as! SearchProfileDetailController

                controller.user = user
                self.delegate?.pushController(controller)
            }
        }
        
    }
    
    @IBAction func pressLikeButton(_ sender: AnyObject) {
        
        let currentUser = UserRepository.instance.getCurrentLocalUser()
        let style = self.activityItem?.object as! Style
        
        if !style.isLikedByCurrentUser {
            currentUser.likeUpload(style) { result, error in
                self.updateLikesCountAndIcon(isLiked: true)
            }
        } else {
            currentUser.unlikeUpload(style) { result, error in
                self.updateLikesCountAndIcon(isLiked: false)
            }
        }
    }
    
    func updateLikesCountAndIcon(isLiked: Bool) {
        
        if isLiked == true {
            self.numberOfLikesUIButton.setImage(UIImage(named: "fa-heart"), for: UIControl.State.normal)
        } else {
            self.numberOfLikesUIButton.setImage(UIImage(named: "fa-heart-o-white"), for: UIControl.State.normal)
        }
        
       (self.activityItem?.object as! Style).getLikesCount() { count, error in
            self.numberOfLikesUIButton.setTitle(" \(count) \( (count == 1) ? "Like" : "Likes")", for: UIControl.State.normal)
        }
    }
  
}