export const Auth = {
  login(email, pass, cb) {
    cb = arguments[arguments.length - 1]
    if (localStorage.token) {
      if (cb) {
        cb(true);
        this.onChange(true);
        return
      }
    }
    pretendRequest(email, pass, (res) => {
      if (res.authenticated) {
        localStorage.token = res.token
        if (cb) {
          cb(true);
          this.onChange(true);
        }
      } else {
        if (cb) {
          cb(false);
          this.onChange(false);
        }
      }
    })
  },

  getToken() {
    return localStorage.token
  },

  logout(cb) {
    delete localStorage.token
    if (cb) {
      cb();
      this.onChange(false);
    }
  },

  loggedIn() {
    return !!localStorage.token
  },

  onChange() {},
}

function pretendRequest(email, pass, cb) {
  setTimeout(() => {
    if (email === 'joe@example.com' && pass === 'password1') {
      cb({
        authenticated: true,
        token: Math.random().toString(36).substring(7),
      })
    } else {
      cb({ authenticated: false })
    }
  }, 0)
}

export const Auth = {
  login(email, pass, cb) {
    cb = arguments[arguments.length - 1]
    if (localStorage.token) {
      if (cb) {
        cb(true);
        this.onChange(true);
        return
      }
    }
    pretendRequest(email, pass, (res) => {
      if (res.authenticated) {
        localStorage.token = res.token
        localStorage.email = email
        if (cb) {
          cb(true);
          this.onChange(true);
        }
      } else {
        if (cb) {
          cb(false);
          this.onChange(false);
        }
      }
    })
  },

  getToken() {
    return localStorage.token
  },

  getEmail() {
    return localStorage.email
  },

  logout(cb) {
    delete localStorage.token
    if (cb) {
      cb();
      this.onChange(false);
    }
  },

  loggedIn() {
    return !!localStorage.token
  },

  onChange() {},
}

function pretendRequest(email, pass, cb) {
  setTimeout(() => {
    if (email === 'joe@example.com' && pass === 'password1') {
      cb({
        authenticated: true,
        token: Math.random().toString(36).substring(7),
      })
    } else {
      cb({ authenticated: false })
    }
  }, 0)
}

Add email in localStorage on login, and getEmail() helper function
Add email in localStorage on login, and getEmail() helper function
