//
//  KMHomeRecommondView.swift
//  PDF Reader Pro
//
//  Created by Niehaoyu on 2024/10/10.
//

import Cocoa
import KMComponentLibrary

class KMHomeRecommondView: BaseXibView {
    
    @IBOutlet var dividerView: ComponentDivider!
    
    @IBOutlet var productsBGView: NSView!
    @IBOutlet var productsLabel: NSTextField!
    
    @IBOutlet var othersBGView: NSView!
    @IBOutlet var othersLabel: NSTextField!
    @IBOutlet var othersTopConst: NSLayoutConstraint!
    
    @IBOutlet var adsView: NSView!
    @IBOutlet var adsImageView: NSImageView!
    @IBOutlet var adsCloseBtn: NSButton!
    
    
    //MARK: - func
    public override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        
        // Drawing code here.
    }
    
    public required init?(coder decoder: NSCoder) {
        super.init(coder: decoder)
        
    }
    
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }
    
    public override func awakeFromNib() {
        super.awakeFromNib()
            
        setupUI()
    }
    
    override func updateUILanguage() {
        super.updateUILanguage()
        
        setupUI()
        
        reloadData()
    }
    
    override func updateUIThemeColor() {
        super.updateUIThemeColor()
        
        productsLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
        othersLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
        
        reloadData()
    }
    
    //MARK: - Setter
    open var inputData: KMAdvertisementContent? {
        didSet {
            reloadData()
        }
    }
    
    func setupUI() {
        productsLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
        othersLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
        
    }
    
    func reloadData() {
        if let subviews = productsBGView?.subviews {
            for view in subviews {
                if view is ComponentCSelector {
                    view.removeFromSuperview()
                }
            }
        }
        
        if let subviews = othersBGView?.subviews {
            for view in subviews {
                if view is ComponentNavBarItem {
                    view.removeFromSuperview()
                }
            }
        }
        
        let products = KMAdvertisementManager.manager.info.recommondContent?.recommondContentPDFPro
        
        productsBGView.isHidden = true
        othersTopConst.constant = 24

        if let productContents = products?.content {
            productsBGView.isHidden = false
            othersTopConst.constant = 100
             
            productsLabel.stringValue = KMAdvertisementModelTransition.transitionLanguage(langeuage: products?.name)
 
            var viewXValue: CGFloat = 0
            
            for item: KMAdvertisementItemInfo in productContents {
                let view = ComponentCSelector()
                view.frame = CGRectMake(viewXValue, 0, 43, 24)
                productsBGView.addSubview(view)
                viewXValue += 55
                view.properties = ComponentCSelectorProperty(size: .s, state: .normal, text: nil, iconImage: nil)
                
                let normalUrl = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: item.image, highlight: false))
                let highURL = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: item.image, highlight: true))
                let toolTip = KMAdvertisementModelTransition.transitionLanguage(langeuage: item.tooltip)
                
                var normalImage = NSImage()
                normalImage = KMAdvertisementImage.imageWithURL(url: normalUrl) { image in
                    normalImage = image
                    view.reloadData()
                }
                view.properties.iconImage = normalImage
                view.toolTip = toolTip
                
                var hov_Image = NSImage()
                hov_Image = KMAdvertisementImage.imageWithURL(url: highURL) { image in
                    hov_Image = image
                    view.reloadData()
                }
                view.properties.icon_hov_Image = hov_Image
                view.reloadData()
                
                view.customData = item
                view.setTarget(self, action: #selector(productsItemClick(_:)))
            }
        }
         
        let others = KMAdvertisementManager.manager.info.recommondContent?.recommondContentOther
        if let productContents = others?.content {
            othersBGView.isHidden = false
            var viewYValue: CGFloat = CGRectGetHeight(othersBGView.frame) - 28 - 36
            
            othersLabel.stringValue = KMAdvertisementModelTransition.transitionLanguage(langeuage: others?.name)

            for item: KMAdvertisementItemInfo in productContents {
                let view = ComponentNavBarItem()
                view.frame = CGRectMake(0, viewYValue, CGRectGetWidth(othersBGView.frame), 36)
                view.autoresizingMask = [.width, .minYMargin]
                othersBGView.addSubview(view)
                view.properties = ComponentNavbarItemProperty(state: .normal,
                                                              text: KMAdvertisementModelTransition.transitionLanguage(langeuage: item.name),
                                                              iconImage: nil,
                                                              keepState: false)
                 
                let normalUrl = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: item.image, highlight: false))
                let highURL = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: item.image, highlight: true))
                let toolTip = KMAdvertisementModelTransition.transitionLanguage(langeuage: item.tooltip)

                var normalImage = NSImage()
                normalImage = KMAdvertisementImage.imageWithURL(url: normalUrl) { image in
                    normalImage = image
                    view.reloadData()
                }
                view.properties.iconImage = normalImage
                view.toolTip = toolTip
                
                var hov_Image = NSImage()
                hov_Image = KMAdvertisementImage.imageWithURL(url: highURL) { image in
                    hov_Image = image
                    view.reloadData()
                }
                view.properties.icon_hov_Image = hov_Image
                view.reloadData()
                
                view.customData = item
                view.setTarget(self, action: #selector(othersItemClick(_:)))
                viewYValue -= 44
            }
            
        } else {
            othersBGView.isHidden = true
        }
         
        if IAPProductsManager.default().isAvailableAllFunction() {
            adsView.isHidden = true
        } else {
            adsView.isHidden = false
            let adsData = KMAdvertisementManager.manager.info.advertisement?.content
            guard let model = adsData?.first else {
                adsView.isHidden = true
                return
            }
            if let versionKey = model.version {
                if UserDefaults.standard.object(forKey: versionKey) != nil {
                    adsView.isHidden = true
                    return
                }
            }
            let url = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: model.image, highlight: false))
            adsImageView.image = KMAdvertisementImage.imageWithURL(url: url, completion: { [weak self] image in
                self?.adsImageView.image = image
            })
        }
        
    }
    
    //MARK: - func
    @objc func productsItemClick(_ sender: ComponentCSelector) {
        if let subviews = productsBGView?.subviews {
            for view in subviews {
                if view is ComponentCSelector {
                    (view as! ComponentCSelector).properties.state = .normal
                    (view as! ComponentCSelector).reloadData()
                }
            }
        }
        
        let itemData: KMAdvertisementItemInfo = sender.customData as! KMAdvertisementItemInfo
        let string = KMAdvertisementModelTransition.transitionLanguage(langeuage: itemData.linkURL)
        if string.count != 0  {
            NSWorkspace.shared.open(URL.init(string: string)!)
        }
 
    }
    
    @objc func othersItemClick(_ sender: ComponentNavBarItem) {
        if let subviews = othersBGView?.subviews {
            for view in subviews {
                if view is ComponentNavBarItem {
                    (view as! ComponentNavBarItem).properties.state = .normal
                    (view as! ComponentNavBarItem).reloadData()
                }
            }
        }
        
        let itemData: KMAdvertisementItemInfo = sender.customData as! KMAdvertisementItemInfo
        let string = KMAdvertisementModelTransition.transitionLanguage(langeuage: itemData.linkURL)
        if string.count != 0  {
            NSWorkspace.shared.open(URL.init(string: string)!)
        }
    }
    
    @IBAction func adsViewClicked(_ sender: Any) {
        let adsData = KMAdvertisementManager.manager.info.advertisement?.content
        guard let model = adsData?.first else {
            adsView.isHidden = true
            return
        }
        
        let string = KMAdvertisementModelTransition.transitionLanguage(langeuage: model.linkURL)
        if string.count != 0  {
            NSWorkspace.shared.open(URL.init(string: string)!)
        }
        if let versionKey = model.version {
            UserDefaults.standard.set("show", forKey: versionKey)
            UserDefaults.standard.synchronize()
        }
            
        adsView.isHidden = true
    }
     
    @IBAction func closeAdsImageview(_ sender: Any) {
    
        adsView.isHidden = true
         
    }
    
}