import { observable, action, flow } from 'mobx';
import {RESOURCE} from "../common/fetch";
import {Message} from "../common/message";
import {navigate_login, navigate_replace} from "../common/utils";
let md5 = require('md5');
let sha1 = require('js-sha1');

class User {
    @observable isFirstLogin = localStorage.getItem('isFirstLogin') === 'true';
    @observable user = {};
    @observable loading = false;

    constructor() {
        this.user = JSON.parse(localStorage.getItem('paisong') || "{}");
    }

    @action
    login = flow(function* ({ email, password }){
        this.loading = true;
        try {
            let data = yield RESOURCE.post('/api/v1/credential/Login',{ email, password:sha1(md5(password)) });
            localStorage.setItem('paisong',JSON.stringify(data.data));
            this.user = data.data;
            let { data:{ firstLogin } } = yield RESOURCE.post('/api/v1/credential/IsFirstLogin',{ email: data.data.email});
            this.isFirstLogin = firstLogin;
            localStorage.setItem('isFirstLogin',this.isFirstLogin);
            navigate_replace('/firewall');
        }catch (e) {
            if(e.status === 403) {
                Message.error('用户名或密码错误!');
            }else {
                Message.alert(e);
            }
        }
        this.loading = false;
    }.bind(this));

    getToken() {
        let Authorization = this.user.loginToken;
        return Authorization ? { Authorization } : {};
    }

    logout() {
        navigate_login();
        localStorage.removeItem('paisong');
        localStorage.removeItem('isFirstLogin');
    }
}

export const userStore = new User();