import { writable } from "svelte/store";

// This is a "Custom Store" see that chapter in the Svelte Tutorial, should be fine
// NVM this is definitely overkill
// function createLogin() {
//     const { subscribe, update } = writable(false);

//     return {
//         subscribe,
//         login: () => update(s => s = true),
//         logout: () => update(s => s = false),
//     }
// }
// export const loginStatus = createLogin();

// export const loginStatus = writable({
//   42: false,
//   tfa: false,
// });

// function createLoginStatus() {

//   //ok it really hated all this

//   // const store = writable({
//   //   fortyTwo: false,
//   //   tfa: false,
//   // });

//   // return {
//   //   ...store,
//   //   subscribe,
//   //   // toggle42: () => update( l => l.fortyTwo = !l.fortyTwo ),
//   //   toggle42: () => store.update( fortyTwo => !fortyTwo ),
//   //   // toggleTFA: () => update( l => l.tfa = !l.tfa ),
//   //   toggleTFA: () => store.update( tfa => !tfa ),
//   //   isLogged: () => store.fortyTwo && store.tfa,
//   //   // isLogged: this.fortyTwo && this.tfa,
//   //   // it really doesn't like "this."
//   //   // isLogged: () => (this.tfa && this.fortyTwo),
//   //   // this. ? or (l) => l.tfa ... ?
//   // }


//   //  doesn't seem to work...
//   const { subscribe, update } = writable({
//     fortyTwo: false,
//     tfa: false,
//   });

//   return {
//     subscribe,
//     // toggle42: () => update( l => l.fortyTwo = !l.fortyTwo ),
//     toggle42: () => update( fortyTwo => !fortyTwo ),
//     // toggleTFA: () => update( l => l.tfa = !l.tfa ),
//     toggleTFA: () => update( tfa => !tfa ),
//     // isLogged: () => fortyTwo && tfa,
//     // isLogged: this.fortyTwo && this.tfa,
//     // it really doesn't like "this."
//     // isLogged: () => (this.tfa && this.fortyTwo),
//     // this. ? or (l) => l.tfa ... ?
//     isLogged() {
//       return fortyTwo && tfa;
//     },
//   }

//   // possible other way of doing this

//   // const store = writable({
//   //   fortyTwo: false,
//   //   tfa: false,
//   // });

//   // return {
//   //   ...store,
//   //   subscribe,
//   //   // toggle42: () => update( l => l.fortyTwo = !l.fortyTwo ),
//   //   toggle42: () => store.update( l.fortyTwo => !l.fortyTwo ),
//   //   toggleTFA: () => store.update( l => l.tfa = !l.tfa ),
//   //   isLogged: store.fortyTwo && store.tfa,
//   //   // isLogged: () => (this.tfa && this.fortyTwo),
//   //   // this. ? or (l) => l.tfa ... ?
//   // }

// }

function createLoginStatus() {
  const { subscribe, update } = writable({
    fortyTwo: false,
    tfa: false,
  });

  function toggle42() {
    update( (old) => ({...old, fortyTwo: !old.fortyTwo}) );
  };

  function toggleTFA() {
    // update( () => {
    //   self.tfa = !self.tfa;
    //   return self;
    // })
    // console.log("testing");
    update( (old) => ({...old, tfa: !old.tfa}) );
  };

  function isLogged() {
    // return (l) => {l.fortyTwo && l.tfa};
    // return self.fortyTwo && self.tfa;
    // return fortyTwo && tfa;
  };

  return { subscribe, update, toggle42, toggleTFA, isLogged };
}

export const loginStatus = createLoginStatus();

// OK let's try a totally new approach

// const _loginStatus = writable({
//   fortyTwo: false,
//   tfa: false,
// })

// export const loginStatus = {
//   subscribe: _loginStatus.subscribe,
//   set: _loginStatus.set,
//   update: _loginStatus.update,
//   toggle42: () => 
// }