//
//  CLBaseGridController.swift

//
//  Created by Leon on 2025/7/24.
//

import UIKit

class CLBaseGridController: CLBaseViewController,UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{
    // MARK: - Properties

    var collectionView: UICollectionView!
    var layout: UICollectionViewFlowLayout!
    var page: Int = 1
    var pageSize: Int = 10
    var datas: [Any] = []

    var listViewDidScrollCallback: ((UIScrollView) -> Void)?

    // MARK: - Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()
        initData()
        initUI()
    }

    // MARK: - Setup

    private func initData() {
        page = 1
        pageSize = 10
        datas = []
    }

    private func initUI() {
        layout = UICollectionViewFlowLayout()
        layout.minimumLineSpacing = 0
        layout.minimumInteritemSpacing = 0

        collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.backgroundColor = .clear
        collectionView.showsVerticalScrollIndicator = true
        collectionView.showsHorizontalScrollIndicator = false

        view.addSubview(collectionView)
        collectionView.snp.makeConstraints { make in
            make.top.equalTo(navigationView.snp.bottom)
            make.leading.trailing.bottom.equalTo(view)
        }
    }

    // MARK: - Public Methods

    func addRefreshHeaderFooter() {
        addRefreshHeader()
        addRefreshFooter()
    }

    func addRefreshHeader() {
        RefreshHeaderAnimator { [weak self] in
            self?.loadNewData()
        }.link(to: collectionView)
    }

    func addRefreshFooter() {
        RefreshFooterAnimator { [weak self] in
            self?.loadMoreData()
        }.link(to: collectionView)
    }

    func removeRefreshHeader() {
        collectionView.mj_header = nil
    }

    func removeRefreshFooter() {
        collectionView.mj_footer = nil
    }

    func loadNewData() {
        page = 1
        loadData()
    }

    func loadMoreData() {
        page += 1
        loadData()
    }

    func loadData() {
        // To be implemented by subclasses
    }

    func scrollCurrentContentTop() {
        collectionView.setContentOffset(.zero, animated: true)
    }

    // MARK: - UICollectionViewDataSource

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return datas.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        return cell
    }

    // MARK: - UICollectionViewDelegate

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // To be implemented by subclasses
    }

    // MARK: - UICollectionViewDelegateFlowLayout

//    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
//        // Default size, to be overridden by subclasses
//        return CGSize(width: collectionView.frame.width, height: 72)
//    }

    // MARK: - UIScrollViewDelegate

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        listViewDidScrollCallback?(scrollView)
    }
}
