import { Action } from '@ngrx/store';
import { DegreePlan } from '@app/core/models/degree-plan';
import { PlannedTerm } from '@app/core/models/planned-term';
import { DegreePlannerState } from '@app/degree-planner/store/state';

export enum PlanActionTypes {
  InitialPlanLoadResponse = '[Plan] Initial Load Response',

  ChangeVisiblePlanRequest = '[Plan] Change Visible Request',
  ChangeVisiblePlanResponse = '[Plan] Change Visible Response',
}

export class InitialPlanLoadResponse implements Action {
  public readonly type = PlanActionTypes.InitialPlanLoadResponse;
  constructor(public payload: DegreePlannerState) {}
}

export class ChangeVisiblePlanRequest implements Action {
  public readonly type = PlanActionTypes.ChangeVisiblePlanRequest;
  constructor(public payload: { newVisibleRoadmapId: number }) {}
}

export class ChangeVisiblePlanResponse implements Action {
  public readonly type = PlanActionTypes.ChangeVisiblePlanResponse;
  constructor(
    public payload: {
      visibleDegreePlan: DegreePlan;
      visibleTerms: PlannedTerm[];
    },
  ) {}
}