use chrono::{Datelike, Duration, Local, TimeZone, Weekday};
use esbat::daily_lunar_phase;
fn main() {
let today = Local::today();
println!("{:^20}", today.format("%B %Y"));
println!("Su Mo Tu We Th Fr Sa");
let first_day = Local.ymd(today.year(), today.month(), 1);
let next_month = Local.ymd(today.year(), today.month(), 1) + Duration::days(31);
let last_day = Local.ymd(next_month.year(), next_month.month(), 1) - Duration::days(1);
print!("{:>width$}", "", width = 3 * first_day.weekday().num_days_from_sunday() as usize);
let mut day = first_day;
let mut weeks = 0;
while day <= last_day {
if today == day {
print!("\x1b[7m");
}
let phase = daily_lunar_phase(day);
if phase.is_principal() {
print!("{}", phase.as_emoji());
} else {
print!("{:>2}", day.day());
}
if today == day {
print!("\x1b[27m");
}
if day.weekday() == Weekday::Sat {
println!();
weeks += 1;
} else {
print!(" ");
}
day = day + Duration::days(1);
}
for _ in weeks..6 {
println!();
}
}