/*
 * Como o vídeo do produto toca (migration 184). Este arquivo é IGUAL em
 * apps/admin e apps/public: o painel grava, a loja lê.
 *
 * Galeria: `sozinho` começa ao abrir a página; `comSom` só vale com `sozinho`
 * (tocar no play já é com som). Janelinha: sempre começa sozinha.
 * O navegador só deixa começar com som depois de um toque na página: quando
 * ele bloqueia, o vídeo começa mudo e a loja mostra "Toque para ouvir".
 */

export type OpcoesDoVideo = {
  galeria: { sozinho: boolean; comSom: boolean; repetir: boolean; controles: boolean };
  flutuante: { comSom: boolean; repetir: boolean };
};

export const OPCOES_PADRAO: OpcoesDoVideo = {
  galeria: { sozinho: false, comSom: false, repetir: false, controles: true },
  flutuante: { comSom: false, repetir: true },
};

function sim(valor: unknown, padrao: boolean) {
  return typeof valor === "boolean" ? valor : padrao;
}

function objeto(valor: unknown): Record<string, unknown> {
  return valor && typeof valor === "object" && !Array.isArray(valor) ? (valor as Record<string, unknown>) : {};
}

export function lerOpcoesDoVideo(bruto: unknown): OpcoesDoVideo {
  const raiz = objeto(bruto);
  const galeria = objeto(raiz.galeria);
  const flutuante = objeto(raiz.flutuante);
  const sozinho = sim(galeria.sozinho, OPCOES_PADRAO.galeria.sozinho);
  return {
    galeria: {
      sozinho,
      comSom: sozinho && sim(galeria.comSom, OPCOES_PADRAO.galeria.comSom),
      repetir: sim(galeria.repetir, OPCOES_PADRAO.galeria.repetir),
      controles: sim(galeria.controles, OPCOES_PADRAO.galeria.controles),
    },
    flutuante: {
      comSom: sim(flutuante.comSom, OPCOES_PADRAO.flutuante.comSom),
      repetir: sim(flutuante.repetir, OPCOES_PADRAO.flutuante.repetir),
    },
  };
}
