use chrono_tz::US::Eastern;
use foxtive_cron::builder::{CronExpression, Month, Weekday};
use std::time::Duration;
fn main() {
println!("=== Foxtive Cron Expression Builder Examples ===\n");
let daily_backup = CronExpression::builder().daily().hour(2).minute(30);
println!("1. Daily backup at 2:30 AM:");
println!(" Expression: {}\n", daily_backup.build());
let business_monitoring = CronExpression::builder()
.weekdays_only()
.hours_range(9, 17)
.minutes_interval(15);
println!("2. Business hours monitoring (every 15 min):");
println!(" Expression: {}\n", business_monitoring.build());
let monthly_report = CronExpression::builder()
.monthly()
.hour(9)
.with_timezone(Eastern);
println!("3. Monthly report at 9 AM Eastern:");
println!(" Expression: {}\n", monthly_report.build());
let health_check = CronExpression::builder()
.seconds_interval(30)
.with_jitter(Duration::from_secs(5));
println!("4. Health check every 30s with 5s jitter:");
println!(" Expression: {}\n", health_check.build());
use chrono::NaiveDate;
let complex_schedule = CronExpression::builder()
.weekdays_only()
.hours_range(8, 18)
.minutes_interval(30)
.exclude_date(NaiveDate::from_ymd_opt(2024, 12, 25).unwrap())
.exclude_date(NaiveDate::from_ymd_opt(2024, 12, 26).unwrap())
.with_jitter(Duration::from_secs(60));
println!("5. Complex weekday schedule with holidays:");
println!(" Expression: {}", complex_schedule.build());
println!(" Blackout dates: 2024-12-25, 2024-12-26\n");
let weekly_meeting = CronExpression::builder()
.day_of_week(Weekday::Monday)
.hour(10)
.minute(0);
println!("6. Weekly meeting Monday at 10 AM:");
println!(" Expression: {}\n", weekly_meeting.build());
let digest_emails = CronExpression::builder()
.daily()
.hours_list(&[8, 12, 18])
.minute(0);
println!("7. Digest emails at 8 AM, 12 PM, 6 PM:");
println!(" Expression: {}\n", digest_emails.build());
let quarterly_review = CronExpression::builder()
.day_of_month(1)
.month(Month::January)
.hour(9);
println!("8. Quarterly review (Jan 1st at 9 AM):");
println!(" Expression: {}\n", quarterly_review.build());
let stock_market = CronExpression::builder()
.every_minute()
.hours_range(9, 16)
.weekdays_only();
println!("9. Stock market data (every min, 9-16 ET weekdays):");
println!(" Expression: {}\n", stock_market.build());
let batch_processing = CronExpression::builder()
.minutes_interval(30)
.hours_list(&[22, 23, 0, 1, 2, 3, 4, 5, 6]);
println!("10. Off-peak batch processing (10 PM - 6 AM):");
println!(" Expression: {}\n", batch_processing.build());
println!("=== All examples completed successfully! ===");
}