import {createPageContext} from '@hooks';
import {Dispatch, useReducer} from 'react';
import {createContext} from 'use-context-selector';

// #region 整体内容
type State = {
  name: string;
  code: string;
  isSearching: boolean;
};

type Action =
| {
  type: 'SEARCH'
  payload: Omit<State, 'isSearching'>
}
| {
  type: 'RESET'
}
| {
  type: 'CHAGNE_SEARCH_STATE',
  payload: boolean,
};

function initState(): State {
  return {
    name: '',
    code: '',
    isSearching: false,
  };
}

function reducer(state: State, action: Action): State {
  const {type} = action;

  switch (type) {
    case 'CHAGNE_SEARCH_STATE':
      return {...state, isSearching: action.payload};
    case 'SEARCH':
      return {...state, ...action.payload};
    case 'RESET':
      return initState();
    default:
      return state;
  }
}

export function useContextReducer() {
  return useReducer(reducer, initState());
}

export const context = createContext<[State, Dispatch<Action>]>([initState(), () => null]);
// #endregion

/** 页码context */
export const pageContext = createPageContext();
