package org.eclipse.openk.contactbasedata.config;

import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.service.AuthNAuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

@Log4j2
@Configuration
@EnableScheduling
@ConditionalOnProperty(prefix = "authnauth-sync.scheduling", name="enabled", havingValue="true", matchIfMissing = false)
public class AuthNAuthSchedulerConfig {

    @Autowired
    AuthNAuthService authNAuthService;

    @Value("${authnauth-sync.scheduling.cron-expression}")
    private String cronExpression;

    @Bean
    public void logConfigAuthNAuth(){
        log.info("Scheduler is enabled with cron expression: " + cronExpression);
    }

    @Scheduled(cron = "${ldap-sync.scheduling.cron-expression}")
    public void scheduleTaskSynchronize() {
        log.info("Executing scheduled task: Synchronizing Users with AuthNAuth");
        authNAuthService.synchronizeAuthNAuth();
        log.info("Finished scheduled task: Synchronizing Users with AuthNAuth");
    }

}
