package cn.novalon.gym.manage.app.config;

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

import java.util.Arrays;
import java.util.List;

/**
 * OpenAPI配置类
 * 
 * @author 张翔
 * @date 2026-03-14
 */
@Configuration
public class OpenApiConfig {

        @Bean
        public OpenAPI customOpenAPI() {
                return new OpenAPI()
                                .info(new Info()
                                                .title("Novalon Manage System API")
                                                .version("1.0.0")
                                                .description("Novalon 管理系统 RESTful API 文档")
                                                .contact(new Contact()
                                                                .name("Novalon Team")
                                                                .email("support@novalon.cn"))
                                                .license(new License()
                                                                .name("Apache 2.0")
                                                                .url("https://www.apache.org/licenses/LICENSE-2.0")))
                                .servers(List.of(
                                                new Server().url("http://localhost:8084").description("开发环境"),
                                                new Server().url("https://api.novalon.cn").description("生产环境")))
                                .tags(Arrays.asList(
                                                new Tag().name("用户管理").description("用户相关操作"),
                                                new Tag().name("角色管理").description("角色相关操作"),
                                                new Tag().name("配置管理").description("系统配置相关操作"),
                                                new Tag().name("字典管理").description("字典数据相关操作"),
                                                new Tag().name("通知管理").description("系统通知相关操作"),
                                                new Tag().name("文件管理").description("文件上传下载相关操作"),
                                                new Tag().name("日志管理").description("操作日志相关操作"),
                                                new Tag().name("认证管理").description("登录认证相关操作"),
                                                new Tag().name("统计信息").description("系统统计相关操作")));
        }

        @Bean
        public GroupedOpenApi allApi() {
                return GroupedOpenApi.builder()
                                .group("all")
                                .pathsToMatch("/api/**")
                                .build();
        }
}
