package com.bocloud.ims.booter.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author dmw
 */
@EnableSwagger2
@Configuration
public class SwaggerConfiguration {

	@Bean
	public Docket compute() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("资源纳管-计算").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.compute"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket storage() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("资源纳管-存储").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.storage"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket network() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("资源纳管-网络").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.network"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket azure() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("Azure").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.azure"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket contentlibrary() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("VC内容库").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.contentlibrary"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket database() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("数据库").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.database"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket f5() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("F5").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.f5"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket fusionsphere() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("FusionSphere").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.fusionsphere"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket h3c() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("H3C").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.h3c"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket hmc() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("HMC").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.hmc"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket horizon() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("HORIZON").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.horizon"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket kubernetes() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("KUBERNETES").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.kubernetes"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket pbm() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("PBM").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.pbm"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket powervc() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("POWERVC").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.resource.powervc"))
				.paths(PathSelectors.any()).build();
	}
	
	// 资源配置
	@Bean
	public Docket resourceCheck() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("资源配置").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.check"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket installation() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("软件安装").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.installation"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket scheduler() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("定时任务").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.scheduler"))
				.paths(PathSelectors.any()).build();
	}
	
	@Bean
	public Docket stats() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
				// 分组名称
				.groupName("首页统计").select()
				// 这里指定Controller扫描包路径
				.apis(RequestHandlerSelectors.basePackage("com.bocloud.ims.booter.controller.stats"))
				.paths(PathSelectors.any()).build();
	}
	
	public ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("PASS资源管理服务API接口文档").description("PASS资源管理服务API接口文档")
				.termsOfServiceUrl("http://www.bocloud.com/").contact(new Contact("丁明威", "b", "d")).version("1.0")
				.build();
	}

}
