package com.qqchen.deploy.backend.deploy.entity;

import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum;
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
import com.qqchen.deploy.backend.framework.domain.Entity;
import jakarta.persistence.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 团队应用关联实体
 *
 * @author qqchen
 * @since 2025-10-31
 */
@Data
@EqualsAndHashCode(callSuper = true)
@jakarta.persistence.Entity
@Table(name = "deploy_team_application")
@LogicDelete(false)
public class TeamApplication extends Entity<Long> {

    /**
     * 团队ID
     */
    @Column(name = "team_id", nullable = false)
    private Long teamId;

    /**
     * 应用ID
     */
    @Column(name = "application_id", nullable = false)
    private Long applicationId;

    /**
     * 环境ID
     */
    @Column(name = "environment_id", nullable = false)
    private Long environmentId;

    /**
     * 构建类型（JENKINS-Jenkins构建，NATIVE-脚本部署）
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "build_type", length = 50)
    private BuildTypeEnum buildType;

    // ==================== 源Git配置（公司内部Git） ====================
    
    /**
     * 源Git系统ID（公司Git，关联sys_external_system，type=GIT）
     */
    @Column(name = "source_git_system_id")
    private Long sourceGitSystemId;

    /**
     * 源Git项目ID（公司Git项目ID）
     */
    @Column(name = "source_git_project_id")
    private Long sourceGitProjectId;

    /**
     * 源分支名称（公司Git分支）
     */
    @Column(name = "source_branch", length = 100)
    private String sourceBranch;

    // ==================== 目标Git配置（客户环境Git） ====================
    
    /**
     * 目标Git系统ID（客户环境Git，关联sys_external_system）
     * 仅在团队开发模式为SYNC_MODE时需要配置
     */
    @Column(name = "target_git_system_id")
    private Long targetGitSystemId;

    /**
     * 目标Git项目ID（客户环境Git项目）
     */
    @Column(name = "target_git_project_id")
    private Long targetGitProjectId;

    /**
     * 目标分支名称（客户环境分支）
     * 为空时默认与源分支（sourceBranch字段）同名
     */
    @Column(name = "target_branch", length = 255)
    private String targetBranch;

    // ==================== 部署配置 ====================
    
    /**
     * 部署系统ID（关联sys_external_system，type=JENKINS）
     * 仅当 buildType=JENKINS 时使用
     */
    @Column(name = "deploy_system_id")
    private Long deploySystemId;

    /**
     * 部署任务名称（Jenkins Job名称）
     * 仅当 buildType=JENKINS 时使用
     */
    @Column(name = "deploy_job", length = 100)
    private String deployJob;

    /**
     * 工作流定义ID（关联workflow_definition）
     */
    @Column(name = "workflow_definition_id")
    private Long workflowDefinitionId;
}

