/**
 * @ Author: Harry
 * @ Create Time: 2025-06-25
 * @ Modified by: Harry
 * @ Modified time: 2025-06-26
 * @ Description: Configuration for Kinde integration.
 */

package ca.trolet.datareplicationservice.config;

import com.kinde.KindeAdminSession;
import com.kinde.KindeAdminSessionBuilder;
import com.kinde.KindeClient;
import com.kinde.KindeClientBuilder;
import org.openapitools.client.ApiClient;
import org.openapitools.client.api.UsersApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class KindeConfig {

    @Value("${kinde.domain}")
    private String kindeDomain;

    @Value("${kinde.management.client-id}")
    private String kindeClientId;

    @Value("${kinde.management.client-secret}")
    private String kindeClientSecret;

    @Value("${kinde.audience}")
    private String kindeAudience;

    @Bean
    public KindeClient kindeClient() {
        return KindeClientBuilder.builder()
                .domain(kindeDomain)
                .clientId(kindeClientId)
                .clientSecret(kindeClientSecret)
                .addScope("openid")
                .addAudience(kindeAudience)
                .build();
    }

    @Bean
    public ApiClient kindeApiClient(KindeClient kindeClient) {
        KindeAdminSession kindeAdminSession = KindeAdminSessionBuilder.builder()
                .client(kindeClient)
                .build();
        return kindeAdminSession.initClient();
    }

    @Bean
    public UsersApi usersApi(ApiClient apiClient) {
        return new UsersApi(apiClient);
    }
}

