import { AxiosInstance } from 'axios';
import { MainStateManager } from '../MainStateManager';
import { AttrEvent } from '../AttrEvent';
import { IResult } from './GetAll';

export abstract class ModelLanguage {
  private atrrEvent: AttrEvent<IResult> = new AttrEvent(this.empty());
  // private sync: ApiSync = new ApiSync(
  //   this.mainStateManager,
  //   this.axiosInstance,
  //   this.mainStateManager.Usering
  // );

  constructor(
    public mainStateManager: MainStateManager,
    private empty: () => IResult,
    private axiosInstance: AxiosInstance
  ) { }

  on = this.atrrEvent.on;
  removeOn = this.atrrEvent.removeOn;
  trigger = this.atrrEvent.trigger;
  get = this.atrrEvent.get;
  getAll = this.atrrEvent.getAll;
  set = this.atrrEvent.set;
  setKey = this.atrrEvent.setKey;

  // request = (
  //   path: string,
  //   deserialize: (
  //     mainStateManager: MainStateManager,
  //     json: { isAmisa: boolean, languages: ILanguage[] }
  //   ) => IResult,
  //   onError: (
  //     err: AxiosError
  //   ) => void
  // ) => {
  //   this.trigger('form.waitLoading');

  //   this.sync
  //     .fetch(path, {})
  //     .then((response: AxiosResponse) => {
  //       const result = deserialize(this.mainStateManager, response.data);
  //       this.set(result);
  //       this.trigger('form.wasLoaded');
  //     })
  //     .catch((error: AxiosError) => {
  //       onError(error);
  //     });
  // };
}
