package tech.easyflow.publicapi.dto;

import tech.easyflow.ai.entity.Workflow;

import java.io.Serializable;

/**
 * 工作流 Public API 的安全基础信息。
 *
 * @param id 工作流 ID
 * @param alias 工作流别名
 * @param title 工作流标题
 * @param description 工作流描述
 * @param icon 工作流图标
 * @param revision 当前发布修订号
 * @param publishedAt 发布时间，ISO-8601 格式
 */
public record PublicWorkflowInfo(
        String id,
        String alias,
        String title,
        String description,
        String icon,
        Integer revision,
        String publishedAt) implements Serializable {

    /**
     * 从已发布工作流视图创建安全基础信息。
     *
     * @param workflow 已发布工作流视图
     * @return 安全基础信息
     * @throws IllegalArgumentException 工作流为空时抛出
     */
    public static PublicWorkflowInfo from(Workflow workflow) {
        if (workflow == null) {
            throw new IllegalArgumentException("workflow must not be null");
        }
        return new PublicWorkflowInfo(
                workflow.getId() == null
                        ? null
                        : workflow.getId().toString(),
                workflow.getAlias(),
                workflow.getTitle(),
                workflow.getDescription(),
                workflow.getIcon(),
                workflow.getRevision(),
                workflow.getPublishedAt() == null
                        ? null
                        : workflow.getPublishedAt()
                        .toInstant()
                        .toString());
    }
}
