/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.api.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Swagger文档配置类
 * 该类用于配置Swagger相关的信息，只有在测试环境才会启用（可能在实际部署中根据环境配置来决定是否生效），主要作用是生成接口文档相关的配置内容，
 * 比如定义接口文档的分组、扫描的包路径以及文档的基本信息（标题、描述、版本、授权协议等）。
 * @author LGH
 */
@Configuration
public class SwaggerConfiguration {

    /**
     * 创建分组的OpenAPI对象的方法，用于定义接口文档的分组以及要扫描的包路径，以此来生成对应分组下的接口文档内容。
     * @return 返回一个GroupedOpenApi对象，该对象包含了接口文档分组相关的配置信息。
     */
    @Bean
    public GroupedOpenApi createRestApi() {
        return GroupedOpenApi.builder()
                // 设置接口文档的分组名称，方便在Swagger界面中对接口进行分类查看等操作
               .group("接口文档")
                // 指定要扫描的包路径，Swagger会根据这个路径去查找接口相关的类，进而生成对应的接口文档信息
               .packagesToScan("com.yami.shop.api").build();
    }

    /**
     * 创建OpenAPI对象的方法，用于配置整个接口文档的基本信息，如标题、描述、版本以及授权协议相关的内容。
     * @return 返回一个OpenAPI对象，该对象包含了接口文档的元信息配置。
     */
    @Bean
    public OpenAPI springShopOpenApi() {
        return new OpenAPI()
               .info(new Info()
                        // 设置接口文档的标题，会显示在Swagger界面的顶部等显著位置
                       .title("Mall4j接口文档")
                        // 设置接口文档的描述信息，用于简要说明文档的用途、涵盖范围等内容
                       .description("Mall4j接口文档，openapi3.0 接口，用于前端对接")
                        // 设置接口文档的版本号，方便对不同版本的接口文档进行区分和管理
                       .version("v0.0.1")
                        // 设置接口文档的授权协议相关信息，包括协议名称和协议对应的网址
                       .license(new License().name("使用请遵守AGPL3.0授权协议").url("https://www.mall4j.com")));
    }
}