import React, { useState } from "react";
import { sortHighestFunc, sortLowestFunc } from "utilFuncs/utilFunctions";

function useSort(data: any[]) {
  const [allAdsState, setallAdsState] = useState([]);
  const [sortByState, setsortByState] = useState("Recommended");
  const [sortByTime, setSortByTime] = useState("All Time");

  const sortAdsBy = () => {
    switch (sortByState) {
      case "Highest Price":
        setallAdsState([...data].sort(sortHighestFunc));
        break;
      case "Lowest Price":
        setallAdsState([...data].sort(sortLowestFunc));
        break;
      case "Recommended":
      case "Latest Ads":
        setallAdsState(data);
        break;
      case "Newest":
        setallAdsState(data);
      default:
        setallAdsState(data);
        break;
    }
  };


  let currentDate = new Date();

  const sortAdsByTimePosted = () => {
    switch (sortByTime) {
      case "All Time":
        if (data.length > 0) {
          setallAdsState(data);
        } else {
          setallAdsState(data);
        }
        break;
      case "Today":
        setallAdsState(
          data.filter(
            (ad: any) =>
              new Date(ad.created_at).getDate() === currentDate.getDate()
          )
        );
        break;
      case "A Week":
        let aweekAgo = new Date();
        aweekAgo.setDate(currentDate.getDate() - 7);
        setallAdsState(
          data.filter(
            (ad: any) => new Date(ad.created_at).getDate() <= aweekAgo.getDate()
          )
        );
        break;

      case "A Month":
        let amonthAgo = new Date();
        amonthAgo.setDate(currentDate.getDate() - 30);
        setallAdsState(
          data.filter(
            (ad: any) =>
              new Date(ad.created_at).getDate() <= amonthAgo.getDate()
          )
        );
        break;
      case "A Year":
        let ayearAgo = new Date();
        ayearAgo.setDate(currentDate.getDate() - 360);
        setallAdsState(
          data?.filter(
            (ad: any) => new Date(ad.created_at).getDate() <= ayearAgo.getDate()
          )
        );
        break;
      default:
        break;
    }
  };

  return {
    data,
    allAdsState,
    sortByTime,
    setSortByTime,
    setsortByState,
    sortByState,
    sortAdsBy, 
    sortAdsByTimePosted,
    setallAdsState
  };
}

export default useSort;
