package com.social.media.domain.campaign.valueobject;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;

/**
 * Schedule Configuration Value Object
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ScheduleConfiguration {
    private LocalDateTime startDate;
    private LocalDateTime endDate;
    private Integer dailyLimit;
    private Integer hourlyLimit;
    private Integer actionsPerHour;
    private Integer delayBetweenActions;
    private WorkingHours workingHours;
    private Randomization randomization;
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class WorkingHours {
        private Boolean enabled;
        private LocalTime startTime;
        private LocalTime endTime;
        private List<Integer> workingDays;
    }
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Randomization {
        private Boolean enabled;
        private Integer minDelay;
        private Integer maxDelay;
    }
    
    public boolean isWithinWorkingHours() {
        if (workingHours == null || !workingHours.getEnabled()) {
            return true;
        }
        
        LocalTime now = LocalTime.now();
        return !now.isBefore(workingHours.getStartTime()) && 
               !now.isAfter(workingHours.getEndTime());
    }
    
    public boolean isWithinSchedulePeriod() {
        LocalDateTime now = LocalDateTime.now();
        return (startDate == null || !now.isBefore(startDate)) &&
               (endDate == null || !now.isAfter(endDate));
    }
}
