//
//  CustomStackView.swift
//  TestUIKit
//
//  Created by 100Years on 2025/2/24.
//

import UIKit
import SnapKit

class TSCustomStackView: UIView {
    // 内部的 UIScrollView 和 UIStackView
    private let scrollView: UIScrollView
    private let stackView: UIStackView
    
    // 开放的属性，用于设置方向和间距
    var axis: NSLayoutConstraint.Axis {
        get {
            return stackView.axis
        }
        set {
            stackView.axis = newValue
            updateScrollViewConstraints()
        }
    }
    
    var spacing: CGFloat {
        get {
            return stackView.spacing
        }
        set {
            stackView.spacing = newValue
        }
    }
    
    // 初始化方法
    init(axis: NSLayoutConstraint.Axis = .vertical, spacing: CGFloat = 0) {
        self.scrollView = UIScrollView()
        self.stackView = UIStackView()
        self.stackView.axis = axis
        self.stackView.spacing = spacing
        self.stackView.alignment = .fill
        self.stackView.distribution = .fill
        super.init(frame: .zero)
        setupUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // 设置 UI
    private func setupUI() {
        // 添加 scrollView
        addSubview(scrollView)
        scrollView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        
        // 添加 stackView 到 scrollView
        scrollView.addSubview(stackView)
        updateScrollViewConstraints()
    }
    
    // 根据轴方向更新约束
    private func updateScrollViewConstraints() {
        stackView.snp.remakeConstraints { make in
            make.edges.equalToSuperview()
            
            // 根据轴方向设置 contentSize
            if axis == .vertical {
                make.width.equalTo(scrollView)
            } else {
                make.height.equalTo(scrollView)
            }
        }
    }
    
    // 动态添加子视图的方法
    func addSubviewToStack(_ view: UIView) {
        stackView.addArrangedSubview(view)
        // 可以根据需要对子视图进行额外的布局设置
        view.snp.makeConstraints { make in
            if axis == .vertical {
                make.width.equalTo(stackView)
            } else {
                make.height.equalTo(stackView)
            }
        }
    }
    
    // 在指定位置插入子视图
    func insertViewToStack(_ view: UIView, at stackIndex: Int) {
        stackView.insertArrangedSubview(view, at: stackIndex)
        // 可以根据需要对子视图进行额外的布局设置
        view.snp.makeConstraints { make in
            if axis == .vertical {
                make.width.equalTo(stackView)
            } else {
                make.height.equalTo(stackView)
            }
        }
    }
    
    // 移除子视图
    func removeViewToStack(_ view: UIView) {
        stackView.removeArrangedSubview(view)
        view.removeFromSuperview()
    }
}


//class TSCustomStackView: UIView {
//    // 内部的 UIStackView
//    private let stackView: UIStackView
//    
//    // 开放的属性，用于设置方向和间距
//    var axis: NSLayoutConstraint.Axis {
//        get {
//            return stackView.axis
//        }
//        set {
//            stackView.axis = newValue
//        }
//    }
//    
//    var spacing: CGFloat {
//        get {
//            return stackView.spacing
//        }
//        set {
//            stackView.spacing = newValue
//        }
//    }
//    
//    // 初始化方法
//    init(axis: NSLayoutConstraint.Axis = .vertical, spacing: CGFloat = 0) {
//        self.stackView = UIStackView()
//        self.stackView.axis = axis
//        self.stackView.spacing = spacing
//        self.stackView.alignment = .fill
//        self.stackView.distribution = .fill
//        super.init(frame: .zero)
//        setupUI()
//    }
//    
//    required init?(coder: NSCoder) {
//        fatalError("init(coder:) has not been implemented")
//    }
//    
//    // 设置 UI
//    private func setupUI() {
//        addSubview(stackView)
//        stackView.snp.makeConstraints { make in
//            make.edges.equalToSuperview()
//        }
//    }
//    
//    // 动态添加子视图的方法
//    func addSubviewToStack(_ view: UIView) {
//        stackView.addArrangedSubview(view)
//        // 可以根据需要对子视图进行额外的布局设置
//        view.snp.makeConstraints { make in
//            if axis == .vertical {
//                make.width.equalTo(stackView)
//            } else {
//                make.height.equalTo(stackView)
//            }
//        }
//    }
//    
//    
//    // 动态添加子视图的方法
//    func insertViewToStack(_ view: UIView, at stackIndex: Int){
//        stackView.insertArrangedSubview(view, at: 0)
//        // 可以根据需要对子视图进行额外的布局设置
//        view.snp.makeConstraints { make in
//            if axis == .vertical {
//                make.width.equalTo(stackView)
//            } else {
//                make.height.equalTo(stackView)
//            }
//        }
//    }
//        
//    func removeViewToStack(_ view: UIView){
//        stackView.removeArrangedSubview(view)
//        view.removeFromSuperview()
//    }
//        
//        
//}
