package com.agileboot.codegen.service;

import com.agileboot.codegen.dto.TemplateRepositoryDTO;
import com.agileboot.codegen.entity.UserTemplateRepository;
import com.alibaba.fastjson2.JSONArray;

import java.util.List;

/**
 * 模板仓库 Service接口
 * 
 * @author system
 * @date 2025-09-26
 */
public interface ITemplateRepositoryService {

    /**
     * 获取用户的模板仓库配置（用于代码生成界面显示）
     * 返回格式与原有template.json格式兼容
     *
     * @param userId 用户ID
     * @return 模板配置JSON
     */
    JSONArray getUserTemplateConfig(Long userId);

    /**
     * 获取用户的模板仓库列表（用于仓库管理界面）
     *
     * @param userId 用户ID
     * @return 模板仓库配置列表
     */
    List<UserTemplateRepository> getUserRepositoryList(Long userId);

    /**
     * 获取所有可用模板（系统模板+公开用户模板）
     *
     * @param userId 用户ID
     * @return 可用模板列表
     */
    List<TemplateRepositoryDTO> getAvailableTemplates(Long userId);

    /**
     * 添加模板到用户仓库
     *
     * @param userId         用户ID
     * @param templateSource 模板来源
     * @param templateId     模板ID
     * @param templateName   模板名称
     * @param templateGroup  模板分组
     * @return 是否成功
     */
    boolean addTemplateToRepository(Long userId, String templateSource, String templateId, 
                                   String templateName, String templateGroup);

    /**
     * 从用户仓库移除模板
     *
     * @param userId         用户ID
     * @param templateSource 模板来源
     * @param templateId     模板ID
     * @return 是否成功
     */
    boolean removeTemplateFromRepository(Long userId, String templateSource, String templateId);

    /**
     * 切换模板启用状态
     *
     * @param userId         用户ID
     * @param templateSource 模板来源
     * @param templateId     模板ID
     * @param isEnabled      是否启用
     * @return 是否成功
     */
    boolean toggleTemplateStatus(Long userId, String templateSource, String templateId, Integer isEnabled);

    /**
     * 批量更新模板排序
     *
     * @param userId    用户ID
     * @param templates 模板排序信息列表
     * @return 是否成功
     */
    boolean updateTemplateSort(Long userId, List<TemplateRepositoryDTO> templates);

    /**
     * 初始化用户模板仓库（将系统默认模板添加到新用户仓库）
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean initUserRepository(Long userId);

    /**
     * 检查模板是否已添加到用户仓库
     *
     * @param userId         用户ID
     * @param templateSource 模板来源
     * @param templateId     模板ID
     * @return 是否已存在
     */
    boolean checkTemplateExists(Long userId, String templateSource, String templateId);
}

