package dev.awesomedev.mirim.config;

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

import java.time.Clock;

/**
 * 이 파일이 하는 일:
 * "지금 몇 시인가"를 알려주는 Clock을 스프링 빈으로 등록한다.
 *
 * 학습 포인트: 시간을 쓰는 코드(LoginAttemptService의 잠금 만료 등)가 Instant.now()를
 * 직접 부르면 테스트에서 시간을 조작할 수 없다. Clock을 주입받게 해 두면
 * 운영에선 이 진짜 시계가, 테스트에선 가짜 시계(Clock.fixed)가 들어간다.
 * 같은 이유로 랜덤(Random)이나 외부 API도 직접 부르지 않고 주입받는 게 정석이다.
 */
@Configuration
public class ClockConfig {

    @Bean
    public Clock clock() {
        return Clock.systemUTC();
    }
}
