import UIKit
import Shared

final class ChatView: UIView {
    let titleLabel = UILabel()
    let snackBar = SnackBar()

    var networkIssueVisibleConstraint: NSLayoutConstraint?
    var networkIssueInvisibleConstraint: NSLayoutConstraint?

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

        snackBar.alpha = 0.0
        backgroundColor = Asset.neutralSecondary.color

        addSubview(snackBar)
        addSubview(titleLabel)

        NSLayoutConstraint.activate([
            snackBar.leftAnchor.constraint(equalTo: leftAnchor),
            snackBar.rightAnchor.constraint(equalTo: rightAnchor)
        ])

        networkIssueVisibleConstraint = snackBar.topAnchor.constraint(equalTo: topAnchor)
        networkIssueInvisibleConstraint = snackBar.bottomAnchor.constraint(equalTo: topAnchor)

        networkIssueInvisibleConstraint?.isActive = true
        snackBar.translatesAutoresizingMaskIntoConstraints = false

        titleLabel.snp.makeConstraints {
            $0.top.equalTo(safeAreaLayoutGuide).offset(45)
            $0.left.equalToSuperview().offset(48)
            $0.right.equalToSuperview().offset(-61)
        }
    }

    required init?(coder: NSCoder) { nil }

    func displayNetworkIssue(_ flag: Bool) {
        networkIssueInvisibleConstraint?.isActive = !flag
        networkIssueVisibleConstraint?.isActive = flag

        snackBar.alpha = flag ? 0 : 1

        UIView.animate(withDuration: 0.5) {
            self.setNeedsLayout()
            self.layoutIfNeeded()
            self.snackBar.alpha = flag ? 1 : 0
        }
    }

    func set(name: String) {
        titleLabel.numberOfLines = 0

        let paragraph = NSMutableParagraphStyle()
        paragraph.lineHeightMultiple = 1.15
        paragraph.alignment = .left

        let attrString = NSMutableAttributedString(
            string: Localized.Chat.E2e.placeholder(name)
        )

        attrString.addAttributes([
            .paragraphStyle: paragraph,
            .foregroundColor: Asset.neutralActive.color,
            .font: Fonts.Mulish.bold.font(size: 32.0) as Any
        ])

        attrString.addAttribute(
            name: .foregroundColor,
            value: Asset.brandPrimary.color,
            betweenCharacters: "#"
        )

        titleLabel.attributedText = attrString
    }
}