import { number, string } from "yup";

const month = [
  "Jan",
  "Feb",
  "Mar",
  "Apr",
  "May",
  "Jun",
  "Jul",
  "Aug",
  "Sep",
  "Oct",
  "Nov",
  "Dec",
];
export const dateFormatter = (timestamp:string) => {
  var today = new Date(timestamp) as Date;
  var dd:number = today.getDate();
  var mm:number = today.getMonth() + 1; //January is 0!

  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  var today2 = "" + dd + "/" + mm + "/" + yyyy as string;
  return today2;
};

const getTodayInStr = () => {
  var today = new Date() as Date 
  var dd = today.getDate() as number
  var mm = today.getMonth() as number

  var yyyy = today.getFullYear() as number
  if (dd < 10) {
    dd = 0 + dd;
  }
  var today2 = `${month[mm]} ${dd}, ${yyyy}` as string;
  return today2;
};
const getNextDayInStr = () => {
  var today = new Date() as Date
  var dd = today.getDate() + 1 as number
  var mm = today.getMonth() as number
  var yyyy = today.getFullYear() as number
  if (dd < 10) {
    dd = 0 + dd;
  }
  var today2 = `${month[mm]} ${dd}, ${yyyy}` as string;
  return today2;
};
export const manamusuDateFormatter = (timestamp:string) => {
  var today = new Date(timestamp) as Date
  var dd = today.getDate() as number
  var mm = today.getMonth() as number
  var yyyy = today.getFullYear() as number
  if (dd < 10) {
    dd = 0 + dd;
  }
  var today2 = `${month[mm]} ${dd}, ${yyyy}` as string;
  return today2 === getTodayInStr()
    ? "Today"
    : today2 == getNextDayInStr()
    ? "Tomorrow"
    : today2;
};
export const sportyDateFormatter = (timestamp:string) => {
  var today = new Date(timestamp) as Date
  var dd = today.getDate() as number
  var mm = today.getMonth() as number
  var hours = today.getHours() as number
  var minutes = today.getMinutes() as number
  var ampm = hours >= 12 ? "pm" : "am" as string
  hours = hours % 12 as number
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? 0 + minutes : minutes;
  var strTime = hours + ":" + minutes + " " + ampm as string

  var yyyy = today.getFullYear() as number
  if (dd < 10) {
    dd = 0 + dd;
  }
  return ` ${month[mm]} ${dd}, ${yyyy}, ${strTime}` as string
};
export const manamusuDateFormatterForInvoice = (timestamp:string) => {
  var today = new Date(timestamp) as Date;
  var dd = today.getDate() as number;
  var mm = today.getMonth() as number;

  var yyyy = today.getFullYear() as number;
  if (dd < 10) {
    dd = 0 + dd;
  }
  return `${month[mm]} ${dd}, ${yyyy}`;
};
export const dateFormatterByDate = (timestamp:string) => {
  var today = new Date(timestamp);
  var dd = today.getDate() as number;
  var mm = today.getMonth() + 1 as number

  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  var today2 = "" + dd + "/" + mm + "/" + yyyy;
  return today2;
};
export const reportsDateFormatter = (timestamp:string) => {
  var today = new Date(timestamp)as Date
  var dd = today.getDate() as number;
  var mm = today.getMonth() + 1 as number; //January is 0!

  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  var today2 = "" + dd + "-" + mm + "-" + yyyy as string
  return today2;
};
export const timeFormatter = (timestamp:string) => {
  var today = new Date(timestamp);
  var hh = today.getHours() as number;
  var mm = today.getMinutes() + 1 as number; //January is 0!

  if (hh < 10) {
    hh = 0 + hh;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  return `${hh}:${mm}`;
};
export const formatAMPM = (timestamp:string) => {
  var date = new Date(timestamp) as Date;
  var hours = date.getHours() as number;
  var minutes = date.getMinutes() as number;
  var ampm = hours >= 12 ? "pm" : "am" as string;
  hours = hours % 12 as number;
  hours = hours ? hours : 12 as number; // the hour '0' should be '12'
  minutes = minutes < 10 ? 0 + minutes : minutes as number;
  var strTime = hours + ":" + minutes + " " + ampm as string;
  return strTime;
};

export const getMaxMonthSearch = () => {
  var selectedDate = new Date();
  var today =
    selectedDate.getMonth() === 11
      ? new Date(selectedDate.getFullYear() + 1, 0, 1)
      : new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 1);
  var mm = today.getMonth() + 1; //January is 0!
  var yyyy = today.getFullYear();

  if (mm < 10) {
    mm = 0 + mm;
  }
  return `${yyyy}-${mm}`;
};

export const timestampToYyyyMmDd = (timestamp:string) => {
  var today = new Date(timestamp);
  var dd = today.getDate();
  var mm = today.getMonth() + 1; //January is 0!

  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd= 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  return `${yyyy}-${mm}-${dd}`;
};

export const calendatDateToUtc = (date:string) => {
  var today = new Date(date);
  var dd = today.getUTCDate();
  var mm = today.getUTCMonth() + 1;
  var yyyy = today.getUTCFullYear();
  if (dd < 10) {
    dd = 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  return `${yyyy}-${mm}-${dd}`;
};
export const dateToYyyyMmDd = (timestamp:string) => {
  var today = new Date(timestamp);
  var dd = today.getDate();
  var mm = today.getMonth();

  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = 0 + dd;
  }
  if (mm < 10) {
    mm = 0 + mm;
  }
  return `${yyyy}-${mm}-${dd}`;
};
export const previousDateTimestamp = () => {
  var dateObj = new Date();
  dateObj.setDate(dateObj.getDate() - 1);
  let timestamp = dateObj.getTime();
  return timestamp;
};
export const todayTimestamp = () => {
  let today_a = new Date();
  let dateTimestamp = new Date(
    today_a.getFullYear(),
    today_a.getMonth(),
    today_a.getDate(),
    0,
    0,
    0,
    0
  );
  let timestamp = dateTimestamp.getTime();
  return timestamp;
};
export const todayTimeDate = () => {
  let today_a = new Date();
  let dateTimestamp = new Date(
    today_a.getFullYear(),
    today_a.getMonth(),
    today_a.getDate(),
    0,
    0,
    0,
    0
  );
  return dateTimestamp;
};
export const timeDateByUser = (today:any) => {
  let dateTimestamp = new Date(
    today.getFullYear(),
    today.getMonth(),
    today.getDate(),
    0,
    0,
    0,
    0
  );
  return dateTimestamp;
};
export const checkCreateEditSlot = (today:any, hour:number) => {
  let dateTimestamp = new Date(
    today.getFullYear(),
    today.getMonth(),
    today.getDate(),
    Number(hour),
    0,
    0,
    0
  );
  return dateTimestamp.getTime() > new Date().getTime();
};
export const nextdayTimestamp = () => {
  let today_a = new Date();
  let dd = today_a.getDate();
  let mm = today_a.getMonth() + 1;
  let yyyy = today_a.getFullYear();
  let dateTimestamp = new Date(yyyy, mm - 1, dd + 1, 0, 0, 0, 0);
  let timestamp = dateTimestamp.getTime();
  return timestamp;
};
export const getMonthFirstDate = (date:string) => {
  let today_a = new Date(date);
  let dd = today_a.getDate();
  let mm = today_a.getMonth();
  let yyyy = today_a.getFullYear();
  let dateTimestamp = new Date(yyyy, mm, 1, 0, 0, 0, 0);
  return dateTimestamp;
};
export const getDateToTimestamp = (payload:any) => {
  let today = String(payload).split("/");
  let dd = Number(today[0]);
  let mm = Number(today[1]);
  let yyyy = Number(today[2]);
  let dateTimestamp = new Date(yyyy, mm - 1, dd, 0, 0, 0, 0);
  return dateTimestamp.getTime();
};

export const getPartucularDateTimestamp = () => {
  var today_a = new Date();
  var dd = today_a.getDate();
  var mm = today_a.getMonth() + 1;
  var yyyy = today_a.getFullYear();
  var dateTimestamp = new Date(yyyy, mm - 1, dd, 0, 0, 0, 0);
  var timestamp = dateTimestamp.getTime();
  return timestamp;
};
export const getPartucularDateTimestampFromTimestamp = (date:string) => {
  var today_a = new Date(date);
  var dd = today_a.getDate();
  var mm = today_a.getMonth() + 1;
  var yyyy = today_a.getFullYear();
  var dateTimestamp = new Date(yyyy, mm - 1, dd, 0, 0, 0, 0);
  var timestamp = dateTimestamp.getTime();
  return timestamp;
};
export const utcToLocal = (timestamp:string, hhmm:number) => {
  const date = new Date(timestamp);
  let yyyy = date.getFullYear();
  let mmm = date.getMonth();
  let dd = date.getDate();

  let hh = String(hhmm).split(":")[0];
  let mm = String(hhmm).split(":")[1];
  console.log(
    "utcToLocal y",
    yyyy,
    "Mm",
    mmm,
    "dd",
    dd,
    "hh",
    hh,
    "mm",
    mm,
    "getTimezoneOffset",
    date.getTimezoneOffset() * 60000
  );
  const utc = Date.UTC(yyyy, mmm, dd, Number(hh), Number(mm));
  const local = new Date(utc);

  let localHour = local.getHours();
  let localMinute = local.getMinutes();

  return `${String(localHour).length > 1 ? localHour : `0${localHour}`}:${
    String(localMinute).length > 1 ? localMinute : `0${localMinute}`
  }`;
};
export const utcToLocalDate = (timestamp:string, hhmm:number) => {
  const date = new Date(timestamp);
  let yyyy = date.getFullYear();
  let mmm = date.getMonth();
  let dd = date.getDate();

  let hh = String(hhmm).split(":")[0];
  let mm = String(hhmm).split(":")[1];
  const utc = Date.UTC(yyyy, mmm, dd, Number(hh), Number(mm));
  const local = new Date(utc);

  let localHour = local.getHours();
  let localMinute = local.getMinutes();

  return {
    time: `${String(localHour).length > 1 ? localHour : `0${localHour}`}:${
      String(localMinute).length > 1 ? localMinute : `0${localMinute}`
    }`,
    localDate: local,
    zoneDate: date,
    future: local.getDate() > date.getDate(),
    past: local.getDate() > date.getDate(),
    current: local.getDate() == date.getDate(),
  };
};
export const localToUtc = (hhmm:number) => {
  let hh = String(hhmm).split(":")[0];
  let mm = String(hhmm).split(":")[1];
  let date = new Date();
  const local = new Date(
    date.getFullYear(),
    date.getMonth(),
    date.getDay(),
    Number(hh),
    Number(mm),
    0
  );

  let utcHour = local.getUTCHours();
  let utcMinute = local.getUTCMinutes();
  return `${String(utcHour).length > 1 ? utcHour : `0${utcHour}`}:${
    String(utcMinute).length > 1 ? utcMinute : `0${utcMinute}`
  }`;
};
export const timeZoneToUtc = (timezone:string, hhmm:number) => {
  let gmt5 = "Chicago-GMT-5";
  let gmt6 = "Denven-GMT-6";
  let gmtPhoenix7 = "Phoenix-GMT-7";
  let gmtLos7 = "Los-Angeles-GMT-7";
  let gmt8 = "Anchorage-GMT-8";
  let gmt10 = "Honolulu-GMT-10";

  let hh:string= String(hhmm).split(":")[0];
  let mm :string= String(hhmm).split(":")[1];
  let utcHour;
  if (timezone == gmt5) {
    let originalHH = Number(hh) + 5;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  } else if (timezone == gmt6) {
    let originalHH = Number(hh) + 6;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  } else if (timezone == gmtPhoenix7) {
    let originalHH = Number(hh) + 7;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  } else if (timezone == gmtLos7) {
    let originalHH = Number(hh) + 7;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  } else if (timezone == gmt8) {
    let originalHH = Number(hh) + 8;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  } else if (timezone == gmt10) {
    let originalHH = Number(hh) + 10;
    // if (originalHH > 23) {
    //     utcHour = originalHH - 24
    // } else {
    utcHour = originalHH;
    // }
  }
  return `${String(utcHour).length > 1 ? utcHour : `0${utcHour}`}:${mm}`;
};
export const utcToTimeZone = (timezone:string, hhmm:number) => {
  let gmt5 = "Chicago-GMT-5";
  let gmt6 = "Denven-GMT-6";
  let gmtPhoenix7 = "Phoenix-GMT-7";
  let gmtLos7 = "Los-Angeles-GMT-7";
  let gmt8 = "Anchorage-GMT-8";
  let gmt10 = "Honolulu-GMT-10";

  let hh = String(hhmm).split(":")[0];
  let mm = String(hhmm).split(":")[1];
  let utcHour;
  if (timezone == gmt5) {
    let originalHH = Number(hh) - 5;
    utcHour = originalHH;
  } else if (timezone == gmt6) {
    let originalHH = Number(hh) - 6;
    utcHour = originalHH;
  } else if (timezone == gmtPhoenix7) {
    let originalHH = Number(hh) - 7;
    utcHour = originalHH;
  } else if (timezone == gmtLos7) {
    let originalHH = Number(hh) - 7;
    utcHour = originalHH;
  } else if (timezone == gmt8) {
    let originalHH = Number(hh) - 8;
    utcHour = originalHH;
  } else if (timezone == gmt10) {
    let originalHH = Number(hh) - 10;
    utcHour = originalHH;
  }
  return `${String(utcHour).length > 1 ? utcHour : `0${utcHour}`}:${mm}`;
};
export const localDateToUtc = (date:Date) => {
  var today = new Date(date);
  var dd = today.getUTCDate();
  var mm = today.getUTCMonth();
  var yyyy = today.getUTCFullYear();
  return `${yyyy}-${mm}-${dd}`;
};
export const utcDateToLocal = (utcDate:Date) => {
  let date = new Date(utcDate);
  return new Date(
    Date.parse(
      `${date.getUTCFullYear()}-${date.getUTCMonth()}-${date.getUTCDate()} 0:0:0 AM GMT`
    )
  );
};
