use crate::time::calendars::Calendar;
use chrono::{NaiveDate, Weekday};
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Default, Debug)]
pub struct Ukraine;
#[typetag::serde]
impl Calendar for Ukraine {
fn is_business_day(&self, date: NaiveDate) -> bool {
let (d, w, m, y, dd) = self.naive_date_to_dkmy(date);
let em = self.easter_monday(y);
if self.is_weekend(date)
|| ((d == 1 || ((d == 2 || d == 3) && w == Weekday::Mon))
&& m == 1)
|| ((d == 7 || ((d == 8 || d == 9) && w == Weekday::Mon))
&& m == 1)
|| ((d == 8 || ((d == 9 || d == 10) && w == Weekday::Mon))
&& m == 3)
|| (dd == em)
|| (dd == em+49)
|| ((d == 1 || d == 2 || (d == 3 && w == Weekday::Mon)) && m == 5)
|| ((d == 9 || ((d == 10 || d == 11) && w == Weekday::Mon)) && m == 5)
|| (d == 28 && m == 6)
|| (d == 24 && m == 8)
|| (d == 14 && m == 10 && y >= 2015)
{
false
} else {
true
}
}
}