package tech.easyflow.ai.service;

import com.mybatisflex.core.service.IService;
import tech.easyflow.ai.entity.WorkflowShare;
import tech.easyflow.ai.vo.WorkflowShareCreateResult;

import java.math.BigInteger;

/**
 * 工作流协作分享服务。
 */
public interface WorkflowShareService extends IService<WorkflowShare> {

    /**
     * 创建或刷新工作流的唯一协作分享链接。
     *
     * @param workflowId 工作流 ID
     * @param tenantId 租户 ID
     * @param deptId 部门 ID
     * @param operatorId 操作人账号 ID
     * @param baseUrl 工作流分享基础 URL
     * @return 创建结果
     */
    WorkflowShareCreateResult createUrlShare(
            BigInteger workflowId,
            BigInteger tenantId,
            BigInteger deptId,
            BigInteger operatorId,
            String baseUrl
    );

    /**
     * 创建或刷新工作流的唯一对话分享链接。
     *
     * @param workflowId 工作流 ID
     * @param tenantId 租户 ID
     * @param deptId 部门 ID
     * @param operatorId 操作人账号 ID
     * @param baseUrl 工作流对话分享基础 URL
     * @return 创建结果
     */
    WorkflowShareCreateResult createChatShare(
            BigInteger workflowId,
            BigInteger tenantId,
            BigInteger deptId,
            BigInteger operatorId,
            String baseUrl
    );

    /**
     * 校验分享密钥是否可访问指定工作流。
     *
     * @param shareKey 原始分享密钥
     * @param workflowId 工作流 ID
     * @param tenantId 当前登录租户 ID
     * @return 有效分享记录
     */
    WorkflowShare assertUrlShareAccess(
            String shareKey,
            BigInteger workflowId,
            BigInteger tenantId
    );

    /**
     * 校验分享密钥并解析目标工作流。
     *
     * @param shareKey 原始分享密钥
     * @param tenantId 当前登录租户 ID
     * @return 有效分享记录
     */
    WorkflowShare resolveUrlShare(String shareKey, BigInteger tenantId);

    /**
     * 校验对话分享密钥是否可访问指定工作流。
     *
     * @param shareKey 原始分享密钥
     * @param workflowId 工作流 ID
     * @param tenantId 当前登录租户 ID
     * @return 有效对话分享记录
     */
    WorkflowShare assertChatShareAccess(
            String shareKey,
            BigInteger workflowId,
            BigInteger tenantId
    );

    /**
     * 校验对话分享密钥并解析目标工作流。
     *
     * @param shareKey 原始分享密钥
     * @param tenantId 当前登录租户 ID
     * @return 有效对话分享记录
     */
    WorkflowShare resolveChatShare(String shareKey, BigInteger tenantId);
}
