package com.qqchen.deploy.backend.workflow.repository;

import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.qqchen.deploy.backend.workflow.entity.FormDefinition;
import com.qqchen.deploy.backend.workflow.enums.FormDefinitionStatusEnums;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 表单定义Repository接口
 *
 * @author qqchen
 * @date 2025-10-24
 */
@Repository
public interface IFormDefinitionRepository extends IBaseRepository<FormDefinition, Long> {

    /**
     * 根据表单标识和版本查询
     *
     * @param key         表单标识
     * @param formVersion 表单版本
     * @return 表单定义
     */
    Optional<FormDefinition> findByKeyAndFormVersionAndDeletedFalse(String key, Integer formVersion);

    /**
     * 根据表单标识查询最新版本
     *
     * @param key 表单标识
     * @return 表单定义
     */
    Optional<FormDefinition> findFirstByKeyAndDeletedFalseOrderByFormVersionDesc(String key);

    /**
     * 检查表单标识是否存在
     *
     * @param key 表单标识
     * @return 是否存在
     */
    boolean existsByKeyAndDeletedFalse(String key);

    /**
     * 根据状态分页查询
     *
     * @param status   状态
     * @param pageable 分页参数
     * @return 分页结果
     */
    Page<FormDefinition> findByStatusAndDeletedFalse(FormDefinitionStatusEnums status, Pageable pageable);

    /**
     * 根据状态查询列表
     *
     * @param status 状态
     * @return 表单定义列表
     */
    List<FormDefinition> findByStatusAndDeletedFalse(FormDefinitionStatusEnums status);
}

