package com.bio.bio_backend.global.config;

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.sql.DataSource;

/**
 * 스케줄러 및 분산 락 설정을 위한 Configuration 클래스
 * ShedLock을 사용하여 분산 환경에서 스케줄러 중복 실행을 방지합니다.
 */
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "10m")
public class SchedulerConfig {

    /**
     * ShedLock용 LockProvider Bean을 생성합니다.
     * JDBC 기반으로 분산 락을 관리합니다.
     *
     * @param dataSource 데이터소스
     * @return JdbcTemplateLockProvider 인스턴스
     */
    @Bean
    public LockProvider lockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(
            JdbcTemplateLockProvider.Configuration.builder()
                .withJdbcTemplate(new JdbcTemplate(dataSource))
                .usingDbTime() // DB 시간 사용으로 서버 간 시간차 문제 해결
                .build()
        );
    }
}
