import 'dart:convert';
import 'dart:typed_data';

import 'package:nc_photos/platform/universal_storage.dart' as itf;
import 'package:shared_preferences/shared_preferences.dart';

const String _prefix = "_universal_storage";

class UniversalStorage extends itf.UniversalStorage {
  @override
  putBinary(String name, Uint8List content) async {
    // SharedPreferences happens to save to local storage on web, we'll just use
    // that
    final pref = await SharedPreferences.getInstance();
    await pref.setString("$_prefix.$name", base64UrlEncode(content));
  }

  @override
  getBinary(String name) async {
    final pref = await SharedPreferences.getInstance();
    final contentStr = pref.getString("$_prefix.$name");
    if (contentStr == null) {
      return null;
    } else {
      return base64Decode(contentStr);
    }
  }

  @override
  putString(String name, String content) async {
    // SharedPreferences happens to save to local storage on web, we'll just use
    // that
    final pref = await SharedPreferences.getInstance();
    await pref.setString("$_prefix.$name", content);
  }

  @override
  getString(String name) async {
    final pref = await SharedPreferences.getInstance();
    return pref.getString("$_prefix.$name");
  }

  @override
  remove(String name) async {
    final pref = await SharedPreferences.getInstance();
    await pref.remove("$_prefix.$name");
  }
}