import UIKit
import Shared

final class ChatListView: UIView {
    let snackBar = SnackBar()
    let containerView = UIView()
    let searchView = SearchComponent()
    let listContainerView = ChatListContainerView()
    let searchListContainerView = ChatSearchListContainerView()

    init() {
        super.init(frame: .zero)

        backgroundColor = Asset.neutralWhite.color
        listContainerView.backgroundColor = Asset.neutralWhite.color
        searchListContainerView.backgroundColor = Asset.neutralWhite.color
        searchView.update(placeholder: "Search chats")

        addSubview(snackBar)
        addSubview(searchView)
        addSubview(containerView)
        containerView.addSubview(searchListContainerView)
        containerView.addSubview(listContainerView)

        snackBar.snp.makeConstraints {
            $0.left.equalToSuperview()
            $0.right.equalToSuperview()
            $0.bottom.equalTo(snp.top)
        }

        searchView.snp.makeConstraints {
            $0.top.equalTo(snackBar.snp.bottom).offset(20)
            $0.left.equalToSuperview().offset(20)
            $0.right.equalToSuperview().offset(-20)
        }

        containerView.snp.makeConstraints {
            $0.top.equalTo(searchView.snp.bottom)
            $0.left.equalToSuperview()
            $0.right.equalToSuperview()
            $0.bottom.equalToSuperview()
        }

        listContainerView.snp.makeConstraints {
            $0.edges.equalToSuperview()
        }

        searchListContainerView.snp.makeConstraints {
            $0.edges.equalToSuperview()
        }
    }

    required init?(coder: NSCoder) { nil }

    func showConnectingBanner(_ show: Bool) {
        if show == true {
            snackBar.alpha = 0.0
            snackBar.snp.updateConstraints {
                $0.bottom
                    .equalTo(snp.top)
                    .offset(snackBar.bounds.height)
            }
        } else {
            snackBar.alpha = 1.0
            snackBar.snp.updateConstraints {
                $0.bottom.equalTo(snp.top)
            }
        }

        UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut) {
            self.setNeedsLayout()
            self.layoutIfNeeded()
            self.snackBar.alpha = show ? 1.0 : 0.0
        }
    }
}