package com.kamco.cd.kamcoback.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

  @Bean
  public OpenAPI kamcoOpenAPI() {
    // 🔹 1) SecurityScheme 정의 (Bearer JWT)
    SecurityScheme bearerAuth =
        new SecurityScheme()
            .type(SecurityScheme.Type.HTTP)
            .scheme("bearer")
            .bearerFormat("JWT")
            .in(SecurityScheme.In.HEADER)
            .name("Authorization");

    // 🔹 2) SecurityRequirement (기본으로 BearerAuth 사용)
    SecurityRequirement securityRequirement = new SecurityRequirement().addList("BearerAuth");

    // 🔹 3) Components 에 SecurityScheme 등록
    Components components = new Components().addSecuritySchemes("BearerAuth", bearerAuth);

    return new OpenAPI()
        .info(
            new Info()
                .title("KAMCO Change Detection API")
                .description(
                    "KAMCO 변화 탐지 시스템 API 문서\n\n"
                        + "이 API는 지리공간 데이터를 활용한 변화 탐지 시스템을 제공합니다.\n"
                        + "GeoJSON 형식의 공간 데이터를 처리하며, PostgreSQL/PostGIS 기반으로 동작합니다.")
                .version("v1.0.0")
            //          .contact(new Contact().name("KAMCO Development
            // Team").email("dev@kamco.com").url("https://kamco.com"))
            //          .license(new License().name("Proprietary").url("https://kamco.com/license"))
            )
        .servers(
            List.of(
                new Server().url("http://localhost:8080").description("로컬 개발 서버"),
                new Server().url("https://kamco.dev-api.gs.dabeeo.com").description("개발 서버")
                //          , new Server().url("https://api.kamco.com").description("운영 서버")
                ))
        .components(new Components())
        // 🔥 여기 한 줄이 "모든 API 기본적으로 BearerAuth 요구" 의미
        .addSecurityItem(securityRequirement);
  }
}
