//
//  UIImageView.swift


import UIKit
import Kingfisher

extension UIImage {
    func imageWithInsets(insetDimen: CGFloat) -> UIImage {
        return imageWithInset(insets: UIEdgeInsets(top: insetDimen, left: insetDimen, bottom: insetDimen, right: insetDimen))
    }
    
    func imageWithInset(insets: UIEdgeInsets) -> UIImage {
        
        UIGraphicsBeginImageContextWithOptions(
            CGSize(width: self.size.width + insets.left + insets.right, height: self.size.height + insets.top + insets.bottom), false, self.scale)
        let origin = CGPoint(x: insets.left, y: insets.top)
        self.draw(at: origin)
        let imageWithInsets = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return imageWithInsets!
    }
}

extension UIImageView {
    
    func stopDownloading() {
        self.kf.cancelDownloadTask()
    }
    
    func downloadImage(imageUrl : String? , placeholderImageName: String? = "ic_userlarge", allowPlaceHolder : Bool = true, _ fadeTime : Double = 0.3) {
        
        
        let placeholderImage = UIImage(named: placeholderImageName!)
        if imageUrl == nil || imageUrl?.count == 0 {
            self.image = placeholderImage
            return
        }
        self.kf.indicatorType = .activity
        let imageUrlFinal = imageUrl?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        
        let url = URL(string: imageUrlFinal!)!
        if allowPlaceHolder {
            
            self.kf.setImage(with: url, placeholder: placeholderImage, options: [.transition(.fade(fadeTime))], progressBlock: nil) { (result) in
                switch result {
                case .success(let value):
                    self.image = value.image.imageSizeReduce()
                    break
                case .failure(let error):
                    debugPrint(error)
                    self.image = placeholderImage
                    break
                }
            }
        }else{
            self.kf.setImage(with: url,options: [.transition(.fade(fadeTime))])
        }
    }
    
    func roundCornerss(_ corners:UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
        self.layer.layoutIfNeeded()
        self.layoutIfNeeded()
    }
    
}

