import { Injectable } from '@angular/core';
import { assign, cloneDeep } from 'lodash-es';
import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api';
import { gameSetting as gameSettingData } from './data';

@Injectable({
  providedIn: 'root',
})
export class GameSettingMockApi {
  private _gameSetting: any = gameSettingData;

  /**
   * Constructor
   */
  constructor(private _fuseMockApiService: FuseMockApiService) {
    // Register Mock API handlers
    this.registerHandlers();
  }

  // -----------------------------------------------------------------------------------------------------
  // @ Public methods
  // -----------------------------------------------------------------------------------------------------

  /**
   * Register Mock API handlers
   */
  registerHandlers(): void {
    // -----------------------------------------------------------------------------------------------------
    // @ BasicSetting - GET
    // -----------------------------------------------------------------------------------------------------
    this._fuseMockApiService
      .onGet('api/apps/settings/game', 300)
      .reply(({ request }) => {
        // Clone the deposits
        let gameSetting: any | null = cloneDeep(this._gameSetting);

        // Return the response
        return [
          200,
          {
            gameSetting,
          },
        ];
      });

    // -----------------------------------------------------------------------------------------------------
    // @ BasicSetting - PATCH
    // -----------------------------------------------------------------------------------------------------
    this._fuseMockApiService
      .onPatch('api/apps/settings/game')
      .reply(({ request }) => {
        // Get the id and deposit
        const id = request.body.id;
        const gameSetting = cloneDeep(request.body.gameSetting);

        // Prepare the updated basicSetting
        let updatedBasicSetting = null;

        // Find the deposit and update it
        // this._basicSetting.forEach((item, index, bs) => {
        //   if (item.id === id) {
        //     // Update the deposit
        //     basicSetting[index] = assign({}, basicSetting[index], deposit);

        //     // Store the updated deposit
        //     updatedDeposit = deposits[index];
        //   }
        // });

        // Return the response
        return [200, gameSetting];
      });
  }
}
