import {SubmissionPolicies} from "@app/generated-api";
import {AdminResourceApiEnum} from "@app/shared/enums/api.enum";
import {RoutesEnum} from "@app/shared/enums/routes.enum";
import {submissionPolicyActionNameSpace} from "@app/shared/stores/submission-policy/submission-policy.action";
import {Actions, State, Store} from "@ngxs/store";
import {
  ApiService,
  defaultResourceStateInitValue,
  NotificationService,
  ResourceApiEnum,
  ResourceNameSpace,
  ResourceState,
  ResourceStateModel,
} from "solidify-frontend";
import {environment} from "../../../../environments/environment";
import {LocalStateEnum} from "../../enums/local-state.enum";

export interface SubmissionPolicyStateModel extends ResourceStateModel<SubmissionPolicies> {
}

@State<SubmissionPolicyStateModel>({
  name: LocalStateEnum.submissionPolicy,
  defaults: {
    ...defaultResourceStateInitValue,
  },
})
export class SubmissionPolicyState extends ResourceState<SubmissionPolicies> {
  constructor(protected apiService: ApiService,
              protected store: Store,
              protected notificationService: NotificationService,
              protected actions$: Actions) {
    super(apiService, store, notificationService, actions$, RoutesEnum.adminSubmissionPolicy, environment);
  }

  defineState(): LocalStateEnum {
    return LocalStateEnum.submissionPolicy;
  }

  defineUrlResource(): ResourceApiEnum {
    return AdminResourceApiEnum.submissionPolicies;
  }

  defineResourceNameSpace(): ResourceNameSpace {
    return submissionPolicyActionNameSpace;
  }
}