/* eslint-disable brace-style */

import {
  SecureStorageMock,
  StorageMock,
  toObject,
  DEFAULT_NAMESPACE,
} from "./storageMock";

class AndroidLocalStorage
  extends SecureStorageMock
  implements NativeAndroidLocalStorageI
{
  async getNamespace(namespace = DEFAULT_NAMESPACE) {
    if (!this.items.has(namespace || DEFAULT_NAMESPACE)) {
      throw new Error("namespace not found");
    }

    return Promise.resolve({
      [".namespace"]: namespace, // eslint-disable-line no-useless-computed-key
      ...toObject(this.items.get(namespace || DEFAULT_NAMESPACE)),
    });
  }
}

class AndroidSessionStorage
  extends StorageMock
  implements NativeSessionStorageI
{
  async getAllItems(namespace = DEFAULT_NAMESPACE) {
    if (!this.items.has(namespace || DEFAULT_NAMESPACE)) {
      throw new Error("namespace not found");
    }

    return Promise.resolve(
      toObject(this.items.get(namespace || DEFAULT_NAMESPACE))
    );
  }
}

export const localStorage = new AndroidLocalStorage();

export const sessionStorage = new AndroidSessionStorage();
