package com.ecep.contract.controller.table.cell;

import static com.ecep.contract.SpringApp.getBean;

import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.vo.ContractFileVo;
import com.ecep.contract.vo.ContractVo;

import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;
import lombok.NoArgsConstructor;

@NoArgsConstructor
public class ContractFileTableCell<V> extends AsyncUpdateTableCell<V, Integer, ContractFileVo> {

    /**
     * 创建一个ContractFileTableCell的TableCell工厂，自动获取ContractService实例
     *
     * @param <S> 表格行类型
     * @return TableCell工厂回调
     */
    public static <S> Callback<TableColumn<S, Integer>, TableCell<S, Integer>> forTableColumn() {
        return forTableColumn(getBean(ContractFileService.class));
    }

    /**
     * 创建一个ContractFileTableCell的TableCell工厂，使用提供的ContractFileService实例
     *
     * @param <S>     表格行类型
     * @param service ContractService实例
     * @return TableCell工厂回调
     */
    public static <S> Callback<TableColumn<S, Integer>, TableCell<S, Integer>> forTableColumn(ContractFileService service) {
        return param -> new ContractFileTableCell<S>(service);
    }

    /**
     * 使用指定的ContractFileService创建ContractFileTableCell实例
     *
     * @param contractService ContractService实例
     */
    public ContractFileTableCell(ContractFileService contractService) {
        setService(contractService);
    }

    /**
     * 获取ContractService实例
     *
     * @return ContractService实例
     */
    @Override
    protected ContractFileService getServiceBean() {
        return getBean(ContractFileService.class);
    }

    /**
     * 格式化ContractVo对象为显示文本
     *
     * @param entity ContractVo对象
     * @return 格式化后的文本
     */
    @Override
    public String format(ContractFileVo entity) {
        return entity.getFileName();
    }
}