import { toast } from "react-toastify";
import { BookAction } from "../actions-type";

const initialState = {
  loading: false,
  error: null,
  list: [],
  info: null,
  searchResult: [],
  filterResult: [],
  subjects: [],
  levels: [],
  sortFilters: ["مرتب سازی", "محبوب ترین", "جدیدترین"],
  mockLessons: [
    {
      id: 0,
      title:
        "درس اول : چگونه با نیاندیشن آینده خود و اطرافیانمان را نابود کنیم؟ ",
      duration: 256,
      active: true,
      files: [
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
        {
          type: "document",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
      ],
    },
    {
      id: 1,
      title:
        "درس اول : چگونه با نیاندیشن آینده خود و اطرافیانمان را نابود کنیم؟ ",
      duration: 256,
      active: false,
      files: [
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
      ],
    },
    {
      id: 2,
      title:
        "درس اول : چگونه با نیاندیشن آینده خود و اطرافیانمان را نابود کنیم؟ ",
      duration: 256,
      active: false,
      files: [
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
      ],
    },
    {
      id: 3,
      title:
        "درس اول : چگونه با نیاندیشن آینده خود و اطرافیانمان را نابود کنیم؟ ",
      duration: 256,
      active: false,
      files: [
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: true,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: true,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
        {
          type: "video",
          name: "مقدمه ای جالب و قابل تامل مترجم کتاب",
          duration: "1:40:00",
          view: false,
          download: false,
        },
      ],
    },
  ],
};

const grades = [
  "پیش دبستان",
  "اول",
  "دوم",
  "سوم",
  "چهارم",
  "پنجم",
  "ششم",
  "هفتم",
  "هشتم",
  "نهم",
  "دهم",
  "یازدهم",
  "دوازدهم",
];

export default function book(state = initialState, action: BookAction) {
  let { type, data } = action;
  switch (type) {
    case "book/list":
      let itemsSubject = (Array.isArray(data) ? data : []).map(
        (item, index) => item.name
      );
      if (window.innerWidth < 1000) {
        itemsSubject.unshift("نام کتاب");
      }
      let itemsLevel = (Array.isArray(data) ? data : [])
        .map((item) => item.gradeId * 1)
        .sort((a, b) => a - b)
        .map((e) => grades[e]);
      if (window.innerWidth < 1000) {
        itemsLevel.unshift("پایه تحصیلی");
      }
      return {
        ...state,
        loading: false,
        list: data,
        subjects: Array.from(new Set(itemsSubject)),
        levels: Array.from(new Set(itemsLevel)),
        filterResult: data,
        error: null,
      };
    case "book/info":
      return { ...state, loading: false, info: data, error: null };
    case "book/lesson/active":
      return {
        ...state,
        loading: false,
        error: null,
        mockLessons: state.mockLessons.map((item) =>
          item.id === data
            ? { ...item, active: !item.active }
            : { ...item, active: false }
        ),
      };
    // case "book/update":
    //   return { ...state, loading: false, error: null };
    // case "book/add":
    //   return { ...state, loading: false, error: null };
    // case "book/delete":
    //   return { ...state, loading: false, error: null };
    // case "book/search":
    //   return { ...state };
    // case "book/filter":
    //   const realList = state.list;
    //   const level = data.level;
    //   const subject = data.subject;
    //   const sort = data.sort;
    //   const search = data.search;
    //   if (level.length > 0 || subject.length > 0 || sort || search) {
    //     localStorage.setItem("filter", "ON");
    //   }
    //   let finalSort;
    //   let byLevelFilter = [];
    //   if (level.length > 0) {
    //     level.map((item1) => {
    //       for (let i = 0; i < realList.length; i++) {
    //         if (grades[realList[i].gradeId] === item1) {
    //           byLevelFilter.push(realList[i]);
    //         }
    //       }
    //     });
    //   } else {
    //     byLevelFilter = realList;
    //   }

    //   let bySubjectFilter = [];
    //   if (subject.length > 0) {
    //     subject.map((item1) => {
    //       for (let i = 0; i < byLevelFilter.length; i++) {
    //         if (byLevelFilter[i].name === item1) {
    //           bySubjectFilter.push(byLevelFilter[i]);
    //         }
    //       }
    //     });
    //   } else {
    //     bySubjectFilter = byLevelFilter;
    //   }

    //   const bySearchFilter = search
    //     ? bySubjectFilter.filter((item1) => item1.name.indexOf(search) !== -1)
    //     : bySubjectFilter;

    //   if (sort === "گران ترین") {
    //     finalSort = bySearchFilter.sort((item1, item2) => {
    //       return item1.product[0].price - item2.product[0].price;
    //     });
    //   } else {
    //     finalSort = bySearchFilter;
    //   }
    //   return {
    //     ...state,
    //     loading: false,
    //     error: null,
    //     filterResult: finalSort,
    //   };
    case "book/loading":
      return { ...state, loading: true };
    case "book/error":
      toast.error(data.message);
      return { ...state, loading: false, error: data.message };
    default:
      return state;
  }
}
