//
//  ChartVisibilityItemCell.swift
//  GraphTest
//
//  Created by Andrei Salavei on 4/7/19.
//  Copyright © 2019 Andrei Salavei. All rights reserved.
//

import UIKit
import GraphCore

class ChartVisibilityItemView: UIView {
    static let textFont = UIFont.systemFont(ofSize: 14, weight: .medium)

    let checkButton: UIButton = UIButton(type: .system)
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupView()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        setupView()
    }
    
    func setupView() {
        checkButton.frame = bounds
        checkButton.titleLabel?.font = ChartVisibilityItemView.textFont
        checkButton.layer.cornerRadius = 6
        checkButton.layer.masksToBounds = true
        checkButton.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
        let pressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(didRecognizedLongPress(recognizer:)))
        pressRecognizer.cancelsTouchesInView = true
        checkButton.addGestureRecognizer(pressRecognizer)
        addSubview(checkButton)
    }
    
    var tapClosure: (() -> Void)?
    var longTapClosure: (() -> Void)?

    private func updateStyle(animated: Bool) {
        guard let item = item else {
            return
        }
        UIView.perform(animated: animated, animations: {
            if self.isChecked {
                self.checkButton.setTitleColor(.white, for: .normal)
                self.checkButton.backgroundColor = item.color
                self.checkButton.layer.borderColor = nil
                self.checkButton.layer.borderWidth = 0
                self.checkButton.setTitle("✓ " + item.title, for: .normal)
            } else {
                self.checkButton.backgroundColor = .clear
                self.checkButton.layer.borderColor = item.color.cgColor
                self.checkButton.layer.borderWidth = 1
                self.checkButton.setTitleColor(item.color, for: .normal)
                self.checkButton.setTitle(item.title, for: .normal)
            }

        })
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        checkButton.frame = bounds
    }
    
    @objc private func didTapButton() {
        tapClosure?()
    }

    @objc private func didRecognizedLongPress(recognizer: UIGestureRecognizer) {
        if recognizer.state == .began {
            longTapClosure?()
        }
    }
    
    var item: ChartVisibilityItem? = nil {
        didSet {
            updateStyle(animated: false)
        }
    }
    
    private(set) var isChecked: Bool = true
    func setChecked(isChecked: Bool, animated: Bool) {
        self.isChecked = isChecked
        updateStyle(animated: true)
    }
}