package com.qqchen.deploy.backend.deploy.integration;

import com.qqchen.deploy.backend.deploy.entity.ExternalSystem;
import com.qqchen.deploy.backend.deploy.integration.response.GitBranchResponse;
import com.qqchen.deploy.backend.deploy.integration.response.GitGroupResponse;
import com.qqchen.deploy.backend.deploy.integration.response.GitProjectResponse;
import com.qqchen.deploy.backend.system.enums.ExternalSystemTypeEnum;

import java.time.LocalDateTime;
import java.util.List;

/**
 * Git服务集成接口
 * 定义与外部Git系统交互的方法
 */
public interface IGitServiceIntegration extends IExternalSystemIntegration {

    /**
     * 获取所有Git组
     *
     * @param system 外部系统配置
     * @return Git组列表
     */
    List<GitGroupResponse> groups(ExternalSystem system);

    /**
     * 获取所有项目
     *
     * @param system 外部系统配置
     * @return 项目列表
     */
    List<GitProjectResponse> projects(ExternalSystem system);

    /**
     * 获取指定组下的所有项目
     *
     * @param system 外部系统配置
     * @param groupId 组ID
     * @return 项目列表
     */
    List<GitProjectResponse> projectsByGroup(ExternalSystem system, Long groupId);

    /**
     * 获取指定项目的所有分支
     *
     * @param system    外部系统配置
     * @param projectId 项目ID
     * @return 分支列表
     */
    List<GitBranchResponse> branches(ExternalSystem system, Long projectId);

    @Override
    default ExternalSystemTypeEnum getSystemType() {
        return ExternalSystemTypeEnum.GIT;
    }
}
