//
//  SinglePickerCell.swift
//  Lookfit
//
//  Created by lemo on 2018/5/11.
//  Copyright © 2020年 ecell. All rights reserved.
//

import UIKit

fileprivate struct Metric {
    static let textColor = kHexColor(0x2A2A2A)
    static let textFont = SystemLightFont(14)
    static let topspace = kScaleHeight(15.0)
}

class SinglePickerCell: TableViewCell {

    var functionType: FunctionTypeFireBoltt? {
        didSet {
            loadFunctionTypeFireBoltt()
        }
    }

    var selectedItem: String? {
        didSet {
            selectItem()
        }
    }
    
    let titleLabel = UILabel().then {
        $0.textColor = Metric.textColor
        $0.font = Metric.textFont
        $0.textAlignment = .center
    }
    
    let pickerView = UIPickerView().then { _ in
    }
    
    typealias SinglePickerClosure = (String) -> Void
    var singlePickerClosure: SinglePickerClosure?
    let subject = PublishSubject<String>()
    var viewModel = SinglePickerViewModels()
    
    override func makeUI() {
        super.makeUI()
        contentView.addSubview(titleLabel)
        contentView.addSubview(pickerView)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        titleLabel.snp.makeConstraints { (make) in
            make.top.equalToSuperview().offset(Metric.topspace)
            make.left.right.equalToSuperview()
        }
        

        pickerView.snp.makeConstraints { (make) in
            make.top.equalToSuperview().offset(kScaleHeight(20.0))
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview().offset(-kScaleHeight(10.0))
        }
    }

}

extension SinglePickerCell {
   
    func selectItem() {
        if selectedItem?.count == 1 {
            if let idx = viewModel.dataSourceVariable.value.firstIndex(of: selectedItem!)  {
                pickerView.selectRow(idx, inComponent: 0, animated: false)
            }
        }
        if let selectedItem = self.selectedItem {
            if let idx = viewModel.dataSourceVariable.value.firstIndex(of: selectedItem)  {
                pickerView.selectRow(idx, inComponent: 0, animated: false)
            }
        }else {
            pickerView.selectRow(1, inComponent: 0, animated: false)
        }
    }
    
    func loadFunctionTypeFireBoltt() {
        viewModel = SinglePickerViewModels(funtionType: functionType!)
        viewModel.dataSourceVariable.asObservable()
            .bind(to: pickerView.rx.items(adapter: SinglePickerViewViewAdapter()))
            .disposed(by: cellDisposeBag)
        pickerView.rx.modelSelected(String.self)
            .subscribe(onNext: { [weak self] item in
                guard let `self` = self else { return }
                if let singlePicker = self.singlePickerClosure {
                    singlePicker(item.first!)
                }
                self.subject.onNext(item.first!)
            })
            .disposed(by: cellDisposeBag)
    }

}