import { localStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/LocalStorage";
import { sessionStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/SessionStorage";
import { createLogger, utilsLogger } from "../../logger";
import { userPreferencesNamespace } from "./conts";

export const preferredAudioLanguageStorageKey = "preferred_audio_language";

export const preferredTextLanguageStorageKey = "preferred_text_language";

export const preferredTextLanguageAuto = "auto"; // used if language is not specified in track metadata

export const getUserTextLanguagePreference = async () =>
  localStorage.getItem(
    preferredTextLanguageStorageKey,
    userPreferencesNamespace
  );

export const getUserAudioPreference = async () => {
  let preferredLanguage = await localStorage.getItem(
    preferredAudioLanguageStorageKey,
    userPreferencesNamespace
  );

  if (!preferredLanguage) {
    const currentLanguage = await sessionStorage.getItem("languageLocale");
    preferredLanguage = currentLanguage;
  }

  return preferredLanguage;
};

const logger = createLogger({
  category: "userLanguagePreference",
  subsystem: "General",
  parent: utilsLogger,
});

const { log_info } = logger;

export const setUserLanguagePreference = async (
  track: QuickBrickPlayer.TextTrack | QuickBrickPlayer.AudioTrack
): Promise<any> => {
  if (!track) {
    return;
  }

  if (track.trackType === "audio") {
    if (track.language?.length > 0) {
      log_info(
        `setUserLanguagePreference: set audio language: ${track.language}`
      );

      return localStorage.setItem(
        preferredAudioLanguageStorageKey,
        track.language,
        userPreferencesNamespace
      );

      // Save key to storage
    }
  } else if (track.trackType === "text") {
    if (track.id === "sub:Off") {
      log_info("setUserLanguagePreference: subtitles disabled");

      return localStorage.removeItem(
        preferredTextLanguageStorageKey,
        userPreferencesNamespace
      );
    } else if (track.language?.length > 0) {
      log_info(
        `setUserLanguagePreference: set subtitles language: ${track.language}`
      );

      return localStorage.setItem(
        preferredTextLanguageStorageKey,
        track.language,
        userPreferencesNamespace
      );
    } else {
      log_info("setUserLanguagePreference: set subtitles language: 'auto'");

      return localStorage.setItem(
        preferredTextLanguageStorageKey,
        preferredTextLanguageAuto,
        userPreferencesNamespace
      );
    }
  }
};
