Add power restore policy page

- This page will show how the system boots once power
  is restored after a power disturbance.

- API used to fetch the JSON:
  /redfish/v1/JsonSchemas/ComputerSystem/ComputerSystem.json
- API used to fetch the current policy and to save updated policy:
  /redfish/v1/Systems/system/

Signed-off-by: Sukanya Pandey <sukapan1@in.ibm.com>
Change-Id: I203bd3c5d26071b882cce6b9950cdb3fb1deb212
diff --git a/src/store/index.js b/src/store/index.js
index 151eb68..fd8b1fc 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -11,6 +11,7 @@
 import BootSettingsStore from './modules/Control/BootSettingsStore';
 import ControlStore from './modules/Control/ControlStore';
 import PowerControlStore from './modules/Control/PowerControlStore';
+import PowerPolicyStore from './modules/Control/PowerPolicyStore';
 import NetworkSettingStore from './modules/Configuration/NetworkSettingsStore';
 import EventLogStore from './modules/Health/EventLogStore';
 import SensorsStore from './modules/Health/SensorsStore';
@@ -45,6 +46,7 @@
     hostBootSettings: BootSettingsStore,
     controls: ControlStore,
     powerControl: PowerControlStore,
+    powerPolicy: PowerPolicyStore,
     powerSupply: PowerSupplyStore,
     networkSettings: NetworkSettingStore,
     eventLog: EventLogStore,
diff --git a/src/store/modules/Control/PowerPolicyStore.js b/src/store/modules/Control/PowerPolicyStore.js
new file mode 100644
index 0000000..4e76cdf
--- /dev/null
+++ b/src/store/modules/Control/PowerPolicyStore.js
@@ -0,0 +1,72 @@
+import api from '@/store/api';
+import i18n from '@/i18n';
+
+const PowerControlStore = {
+  namespaced: true,
+  state: {
+    powerRestoreCurrentPolicy: null,
+    powerRestorePolicies: [],
+  },
+  getters: {
+    powerRestoreCurrentPolicy: (state) => state.powerRestoreCurrentPolicy,
+    powerRestorePolicies: (state) => state.powerRestorePolicies,
+  },
+  mutations: {
+    setPowerRestoreCurrentPolicy: (state, powerRestoreCurrentPolicy) =>
+      (state.powerRestoreCurrentPolicy = powerRestoreCurrentPolicy),
+    setPowerRestorePolicies: (state, powerRestorePolicies) =>
+      (state.powerRestorePolicies = powerRestorePolicies),
+  },
+  actions: {
+    async getPowerRestorePolicies({ commit }) {
+      return await api
+        .get('/redfish/v1/JsonSchemas/ComputerSystem/ComputerSystem.json')
+        .then(
+          ({
+            data: {
+              definitions: { PowerRestorePolicyTypes = {} },
+            },
+          }) => {
+            let powerPoliciesData = PowerRestorePolicyTypes.enum.map(
+              (powerState) => {
+                let desc = `${i18n.t(
+                  `pagePowerRestorePolicy.policies.${powerState}`
+                )} - ${PowerRestorePolicyTypes.enumDescriptions[powerState]}`;
+                return {
+                  state: powerState,
+                  desc,
+                };
+              }
+            );
+            commit('setPowerRestorePolicies', powerPoliciesData);
+          }
+        );
+    },
+    async getPowerRestoreCurrentPolicy({ commit }) {
+      api
+        .get('/redfish/v1/Systems/system')
+        .then(({ data: { PowerRestorePolicy } }) => {
+          commit('setPowerRestoreCurrentPolicy', PowerRestorePolicy);
+        })
+        .catch((error) => console.log(error));
+    },
+    async setPowerRestorePolicy({ commit }, powerPolicy) {
+      const data = { PowerRestorePolicy: powerPolicy };
+
+      return await api
+        .patch('/redfish/v1/Systems/system', data)
+        .then(() =>
+          commit('setPowerRestoreCurrentPolicy', data.PowerRestorePolicy)
+        )
+        .then(() => i18n.t('pagePowerRestorePolicy.toast.successSaveSettings'))
+        .catch((error) => {
+          console.log(error);
+          throw new Error(
+            i18n.t('pagePowerRestorePolicy.toast.errorSaveSettings')
+          );
+        });
+    },
+  },
+};
+
+export default PowerControlStore;