// import { queryNotices } from "../services/api";
import request, { getCustomer } from "@/utils/request";

export default {
  namespace: "global",

  state: {
    collapsed: false,
    notices: [],
    fetchingNotices: false,
    menuItem: {}
  },

  effects: {
    // *fetchNotices(_, { call, put }) {
    //   yield put({
    //     type: "changeNoticeLoading",
    //     payload: true
    //   });
    //   const data = yield call(queryNotices);
    //   yield put({
    //     type: "saveNotices",
    //     payload: data
    //   });
    //   yield put({
    //     type: "user/changeNotifyCount",
    //     payload: data.length
    //   });
    // },
    *clearNotices({ payload }, { put, select }) {
      yield put({
        type: "saveClearedNotices",
        payload
      });
      const count = yield select(state => state.global.notices.length);
      yield put({
        type: "user/changeNotifyCount",
        payload: count
      });
    },
    *refTreeServer({ payload }, { call, put }) {
      const data = yield call(() => request(payload.url));
      yield put({
        type: "refTreeResponse",
        payload: { ...payload, data: data }
      });
    },
    *refListServer({ payload }, { call, put }) {
      payload.params.search_customerId = getCustomer().id;
      payload.params.search_customerRankCode = getCustomer().customerRankCode;
      payload.params.search_saleModel = "01";
      // payload.params.search_EQ_isOptional = 0;
      // payload.params.search_EQ_enableStrucManage = 0;
      payload.params.search_EQ_isEnable = 1;
      const data = yield call(() => {
        return request(payload.url, {
          body: payload.params
        });
      });
      const goodsList = (data || {}).content;
      if (data && data.content && data.content.length > 0) {
        data.content.forEach(item => {
          item.key = item.id;
        });
      }
      yield put({
        type: "refListResponse",
        payload: { ...payload, data: data }
      });
    }
  },

  reducers: {
    showLoginModal(state, { payload }) {
      return {
        ...state,
        showLogin: payload
      };
    },
    changeLayoutCollapsed(state, { payload }) {
      return {
        ...state,
        collapsed: payload
      };
    },
    saveNotices(state, { payload }) {
      return {
        ...state,
        notices: payload,
        fetchingNotices: false
      };
    },
    saveClearedNotices(state, { payload }) {
      return {
        ...state,
        notices: state.notices.filter(item => item.type !== payload)
      };
    },
    changeNoticeLoading(state, { payload }) {
      return {
        ...state,
        fetchingNotices: payload
      };
    },
    addRootTabPane(state, { newPane }) {
      return {
        ...state,
        newPane
      };
    },
    refTreeResponse(state, { payload }) {
      const dataKey = payload.key;
      return {
        ...state,
        [dataKey]: payload.data
      };
    },
    refListResponse(state, { payload }) {
      const dataKey = payload.key;
      return {
        ...state,
        [dataKey]: payload.data
      };
    },
    treeListVisible(state, { payload }) {
      return {
        ...state,
        treeListVisible: payload
      };
    },
    custfeeVisible(state, { payload }) {
      return {
        ...state,
        custfeeVisible: payload
      };
    },
    invoiceVisible(state, { payload }) {
      return {
        ...state,
        invoiceVisible: payload
      };
    },
    treeListSelectedRows(state, { selectedRows }) {
      return {
        ...state,
        selectedRows
      };
    },
    goodsOptsVisible(state, { payload }) {
      return {
        ...state,
        goodsOptsVisible: payload
      };
    },
    menuItem(state, payload) {
      return {
        ...state,
        menuItem: payload.menuItem || {}
      };
    },
    additems(state, payload) {
      return {
        ...state,
        additems: payload.additems
      };
    },
    orderListVisible(state, { payload }) {
      return {
        ...state,
        orderListVisible: payload
      };
    }
  },

  subscriptions: {
    setup({ history }) {
      // Subscribe history(url) change, trigger `load` action if pathname is `/`
      return history.listen(({ pathname, search }) => {
        if (typeof window.ga !== "undefined") {
          window.ga("send", "pageview", pathname + search);
        }
      });
    }
  }
};
