import { StateType } from './Login';
import { Callback } from '../Types';
import { Eventing } from '../Eventing';
import { MainStateManager } from '../MainStateManager';

export abstract class ModelLogin {
  private eventing = new Eventing();

  public abstract loadingState: StateType;

  on = this.eventing.on;
  removeOn = this.eventing.removeOn;
  trigger = this.eventing.trigger;

  onControl = this.eventing.onControl;
  removeOnControl = this.eventing.removeOnControl;
  triggerControl = this.eventing.triggerControl;

  triggerChangeFilterOfPage = this.eventing.triggerChangeFilterOfPage;

  onCodeSimulateKeyDown = this.eventing.onCodeSimulateKeyDown;
  codeSimulateKeyDown = this.eventing.codeSimulateKeyDown;
  removeOnCodeSimulateKeyDown = this.eventing.removeOnCodeSimulateKeyDown;

  onControlWillUnmount = this.eventing.onControlWillUnmount;
  removeOnControlWillUnmount = this.eventing.removeOnControlWillUnmount;
  controlWillUnmount = this.eventing.controlWillUnmount;
  allControlsWillUnmount = this.eventing.allControlsWillUnmount;

  onFactoryClassWillUnmount = (callBack: Callback) => {
    this.on('factory.class.will.unmount' as any, callBack);
  };
  factoryClassWillUnmount = () => {
    this.trigger('factory.class.will.unmount' as any);
  };

  public acceptButton = () => { }
  public cancelButton = () => { }

  constructor(
    public mainStateManager: MainStateManager,
  ) { }


  // postWithoutToken = <D, R>(
  //   identifier: string,
  //   path: string,
  //   data: D,
  // ): Promise<R> => {
  //   this.trigger('change');
  //   return new Promise<R>((resolve, reject) => {
  //     const sync: ApiSync = new ApiSync(this.mainStateManager, Axios(identifier), this.mainStateManager.Usering);
  //     sync
  //       .postWithoutHeader(data, path)
  //       .then((response: AxiosResponse) => {
  //         resolve(response.data);
  //       })
  //       .catch((error: AxiosError) => {
  //         reject(error);
  //       });

  //   })
  // }

  // post = <D, R>(
  //   identifier: string,
  //   path: string,
  //   data: D,
  // ): Promise<R> => {
  //   this.trigger('change');
  //   return new Promise<R>((resolve, reject) => {
  //     const sync: ApiSync = new ApiSync(this.mainStateManager, Axios(identifier), this.mainStateManager.Usering);
  //     sync
  //       .post(data, path)
  //       .then((response: AxiosResponse) => {
  //         resolve(response.data);
  //       })
  //       .catch((error: AxiosError) => {
  //         reject(error);
  //       });

  //   })
  // }

  // get = <R, P>(
  //   identifier: string,
  //   path: string,
  //   getParameter?: P,
  // ) => {
  //   this.trigger('change');
  //   return new Promise<R>((resolve, reject) => {
  //     const sync: ApiSync = new ApiSync(this.mainStateManager, Axios(identifier), this.mainStateManager.Usering);
  //     sync.fetch(path, getParameter)
  //       .then((response: AxiosResponse) => {
  //         resolve(response.data);
  //       })
  //       .catch((error: AxiosError) => {
  //         reject(error.message);
  //       });

  //   });
  // }


  // request = <R, P>(
  //   identifier: string,
  //   path: string,
  //   getParameter?: P,
  // ) => {
  //   this.trigger('change');
  //   return new Promise<R>((resolve, reject) => {
  //     const sync: ApiSync = new ApiSync(this.mainStateManager, Axios(identifier), this.mainStateManager.Usering);
  //     sync.request(path, getParameter)
  //       .then((response: AxiosResponse) => {
  //         resolve(response.data);
  //       })
  //       .catch((error: AxiosError) => {
  //         reject(error.message);
  //       });

  //   });
  // }
}
