//
//  ChatHistoryCell.swift
//  Visual_Novel_iOS
//
//  Created by mh on 2025/10/27.
//

import Foundation
import SnapKit

struct HistoryRow: RowModel {
    let time: String
    let icon: String
    let title: String
    let itemCount: Int // 添加数据项数量
    var cellReuseID: String { "ChatHistoryCell" }
    func cellHeight(tableWidth: CGFloat) -> CGFloat { 
        // 使用更准确的高度计算
        let singleCellHeight = ChatHistoryContentCell.calculateHeight(for: tableWidth)
        let deleteButtonHeight: CGFloat = 62 // DELETE按钮高度（footer view）
        let totalHeight = CGFloat(itemCount) * singleCellHeight + deleteButtonHeight
        return totalHeight
    }
}
 

class ChatHistoryCell: UITableViewCell, CellConfigurable {
    
    private var tableViewHeight: Constraint!
    private var itemCount: Int = 3 // 默认3个item
    private var lastCalculatedHeight: CGFloat = 0
    private var isLayoutConfigured = false
    
    lazy var tableView: UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.separatorStyle = .none
        tableView.delegate = self
        tableView.dataSource = self
        tableView.estimatedRowHeight = 60 // 更准确的预估高度
        tableView.rowHeight = UITableView.automaticDimension
        tableView.backgroundColor = .clear
        tableView.showsVerticalScrollIndicator = false
        tableView.register(ChatHistoryContentCell.self, forCellReuseIdentifier: "ChatHistoryContentCell")
        tableView.contentInset = .zero
        tableView.isScrollEnabled = false
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()
    
    func configure(with row: RowModel) {
        guard let row = row as? HistoryRow else { return }
        
        // 更新数据源
        self.itemCount = row.itemCount
        
        // 立即更新tableView数据
        tableView.reloadData()
        
        // 如果布局已经配置，立即更新高度
        if isLayoutConfigured {
            updateTableViewLayout()
        }
    }
    
    private func updateTableViewLayout() {
        // 确保tableView已经布局完成
        tableView.layoutIfNeeded()
        
        // 强制计算contentSize
        tableView.setNeedsLayout()
        tableView.layoutIfNeeded()
        
        // tableView.contentSize.height 已经包含了所有内容的高度，包括footer view
        let totalH = tableView.contentSize.height
        
        // 避免死循环和无效更新
        guard abs(lastCalculatedHeight - totalH) > 1.0 else { return }
        lastCalculatedHeight = totalH
        
        // 更新高度约束
        tableViewHeight.update(offset: totalH)
        
        // 通知父tableView更新布局
        DispatchQueue.main.async { [weak self] in
            guard let self = self else { return }
            
            // 通知父tableView需要更新高度
            if let tableView = self.superview as? UITableView {
                tableView.beginUpdates()
                tableView.endUpdates()
            } else {
                // 如果不是直接父tableView，则向上查找
                var currentView = self.superview
                while currentView != nil {
                    if let tableView = currentView as? UITableView {
                        tableView.beginUpdates()
                        tableView.endUpdates()
                        break
                    }
                    currentView = currentView?.superview
                }
            }
        }
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        // 确保Cell本身宽度确定后再计算
        guard contentView.bounds.width > 0 else { return }
        
        // 设置tableView的宽度
        tableView.frame.size.width = contentView.bounds.width
        
        // 标记布局已配置
        if !isLayoutConfigured {
            isLayoutConfigured = true
        }
        
        // 更新tableView布局
        updateTableViewLayout()
    }

    
    @objc func deleteBtnTap() {
        
    }
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        configureViews()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func configureViews() {
        contentView.addSubview(tableView)
        
        tableView.snp.makeConstraints { make in
            make.top.left.right.equalToSuperview()
            make.width.equalToSuperview()
            make.bottom.equalToSuperview().priority(.low) // 让底部约束优先级稍低
            tableViewHeight = make.height.equalTo(100).priority(1000).constraint // 初始占位高度
        }
        
        // 确保tableView的约束正确设置
        tableView.setContentHuggingPriority(.required, for: .vertical)
        tableView.setContentCompressionResistancePriority(.required, for: .vertical)
    }

}

extension ChatHistoryCell: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return itemCount
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ChatHistoryContentCell", for: indexPath) as! ChatHistoryContentCell
        cell.selectionStyle = .none

        // 这里可以根据 indexPath 配置不同的 cell 内容
        // 例如：cell.configure(with: data[indexPath.item])
        
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return CGFLOAT_MIN
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return UITableView.automaticDimension
    }
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let footer = UIView()
        footer.backgroundColor = .clear
        
        let deleteBtn = UIButton()
        deleteBtn.cornerRadius = 25.0
        deleteBtn.borderColor = UIColor(hex: "#FF3B30")
        deleteBtn.borderWidth = 2.0
        deleteBtn.setTitle("DELETE ", for: .normal)
        deleteBtn.setTitleColor(UIColor(hex: "#FF3B30"), for: .normal)
        deleteBtn.setImage(UIImage(named: "chat_setting_delete"), for: .normal)
        deleteBtn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17.0)
        deleteBtn.setUp(.default, padding: 5.0)
        deleteBtn.addTarget(self, action: #selector(deleteBtnTap), for: .touchUpInside)
        footer.addSubview(deleteBtn)
        
        deleteBtn.snp.makeConstraints { make in
            make.top.equalToSuperview().offset(10)
            make.bottom.equalToSuperview().inset(2)
            make.left.right.equalToSuperview().inset(20)
            make.height.equalTo(50)
        }
        
        return footer
    }
}
