import { observable, action } from 'mobx';
import { IUser, IStaff } from 'types/base-type';
import { getAccount, getUserList, addUser, modfiyUser, deleteUser } from 'lib/api';
import { roleMap } from 'constants/status-map';
import { setCookie, getCookie } from 'lib/utils';
export class Users {
  @observable
  public loading: boolean = false;

  @observable
  public currentUser: IUser = {
    role: Number(getCookie('role')),
    chineseName: getCookie('chineseName'),
  } as IUser;

  @observable
  public userData: IUser[] = [];

  @observable
  public staff: IStaff[] = [];

  @observable
  public newPassWord: any = null;

  @action.bound
  public setAccount(data: IUser) {
    setCookie([{ key: 'role', value: `${data.role}`, time: 1 }]);
    setCookie([{ key: 'username', value: `${data.username}`, time: 1 }]);
    data.chineseName = getCookie('chineseName');
    this.currentUser = data;
  }

  @action.bound
  public setUserData(data: IUser[]) {
    this.userData = data.map((d: IUser, index: number) => {
      d.roleName = roleMap[d.role];
      d.key = index;
      return d;
    });
    this.setLoading(false);
  }

  @action.bound
  public setLoading(value: boolean) {
    this.loading = value;
  }

  @action.bound
  public setNewPassWord(value: boolean) {
    this.newPassWord = value;
  }

  public getAccount() {
    getAccount().then(this.setAccount);
  }

  public getUserList() {
    this.setLoading(true);
    getUserList().then(this.setUserData);
  }

  public deleteUser(username: string) {
    deleteUser(username).then(() => this.getUserList());
  }

  public modfiyUser(params: IUser) {
    return modfiyUser(params).then(() => this.getUserList());
  }

  public addUser(params: IUser) {
    return addUser(params).then(() => this.getUserList());
  }
}

export const users = new Users();