import { Alert } from '../../interfaces/Alert.interface';
import { LogFormState } from './LogFormState.interface';

type Action =
  | { type: 'SET_ALERT'; payload: Alert | undefined }
  | { type: 'SET_IS_DISABLED'; payload: boolean }
  | { type: 'SET_IS_LOADING'; payload: boolean }
  | { type: 'SET_PILOT_OPTIONS'; payload: { key: string, label: string; }[] }
  | { type: 'SET_SELECTED_PILOT_NAME'; payload: string };

export const initialState: LogFormState = {
  alert: undefined,
  isDisabled: false,
  isLoading: true,
  pilotOptions: [],
  selectedPilotName: ''
};

export const reducer = (
  state: LogFormState,
  action: Action
): LogFormState => {
  switch (action.type) {
    case 'SET_ALERT': {
      return {
        ...state,
        alert: action.payload
      };
    }
    case 'SET_IS_DISABLED': {
      return {
        ...state,
        isDisabled: action.payload
      };
    }
    case 'SET_IS_LOADING': {
      return {
        ...state,
        isLoading: action.payload
      };
    }
    case 'SET_PILOT_OPTIONS': {
      return {
        ...state,
        pilotOptions: action.payload
      };
    }
    case 'SET_SELECTED_PILOT_NAME': {
      return {
        ...state,
        selectedPilotName: action.payload
      };
    }
    default: {
      return state;
    }
  }
};
