1import api from '@/store/api';
2import i18n from '@/i18n';
3
4const PowerControlStore = {
5  namespaced: true,
6  state: {
7    powerCapValue: null,
8    powerCapUri: '',
9    powerConsumptionValue: null,
10  },
11  getters: {
12    powerCapValue: (state) => state.powerCapValue,
13    powerCapUri: (state) => state.powerCapUri,
14    powerConsumptionValue: (state) => state.powerConsumptionValue,
15  },
16  mutations: {
17    setPowerCapValue: (state, powerCapValue) =>
18      (state.powerCapValue = powerCapValue),
19    setPowerCapUri: (state, powerCapUri) => (state.powerCapUri = powerCapUri),
20    setPowerConsumptionValue: (state, powerConsumptionValue) =>
21      (state.powerConsumptionValue = powerConsumptionValue),
22  },
23  actions: {
24    setPowerCapUpdatedValue({ commit }, value) {
25      commit('setPowerCapValue', value);
26    },
27    async getChassisCollection() {
28      return await api
29        .get('/redfish/v1/')
30        .then((response) => api.get(response.data.Chassis['@odata.id']))
31        .then(({ data: { Members } }) =>
32          Members.map((member) => member['@odata.id']),
33        )
34        .catch((error) => console.log(error));
35    },
36    async getPowerControl({ dispatch, commit }) {
37      const collection = await dispatch('getChassisCollection');
38      if (!collection || collection.length === 0) return;
39      return await api
40        .get(`${collection[0]}`)
41        .then((response) => api.get(response.data.Power['@odata.id']))
42        .then((response) => {
43          const powerControl = response.data.PowerControl;
44          if (!powerControl || powerControl.length === 0) return;
45          const powerCapUri = response.data['@odata.id'];
46          const powerCap = powerControl[0].PowerLimit.LimitInWatts;
47          // If system is powered off, power consumption does not exist in the PowerControl
48          const powerConsumption = powerControl[0].PowerConsumedWatts || null;
49          commit('setPowerCapUri', powerCapUri);
50          commit('setPowerCapValue', powerCap);
51          commit('setPowerConsumptionValue', powerConsumption);
52        })
53        .catch((error) => {
54          console.log('Power control', error);
55        });
56    },
57    async setPowerControl({ state }, powerCapValue) {
58      const data = {
59        PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }],
60      };
61      return await api
62        .patch(state.powerCapUri, data)
63        .then(() =>
64          i18n.global.t('pageServerPowerOperations.toast.successSaveSettings'),
65        )
66        .catch((error) => {
67          console.log(error);
68          throw new Error(
69            i18n.global.t('pageServerPowerOperations.toast.errorSaveSettings'),
70          );
71        });
72    },
73  },
74};
75
76export default PowerControlStore;
77