import { FontElement, PlayerElement, SurfaceUIElement } from '../interfaces/UIElementInterfaces';
import { UIElement } from '../models/uI-element';

export function initFontElement(serializedElement: UIElement): FontElement {
  return {
    fontColor: serializedElement.fontColor as string || '#000000',
    font: serializedElement.font as string || 'Roboto',
    fontSize: serializedElement.fontSize !== undefined ? serializedElement.fontSize as number : 20,
    lineHeight: serializedElement.lineHeight !== undefined ? serializedElement.lineHeight as number : 120,
    bold: serializedElement.bold !== undefined ? serializedElement.bold as boolean : false,
    italic: serializedElement.italic !== undefined ? serializedElement.italic as boolean : false,
    underline: serializedElement.underline !== undefined ? serializedElement.underline as boolean : false
  };
}

export function initSurfaceElement(serializedElement: UIElement): SurfaceUIElement {
  return { backgroundColor: serializedElement.backgroundColor as string || '#d3d3d3' };
}

export function initPlayerElement(serializedElement: UIElement): PlayerElement {
  return {
    autostart: serializedElement.autostart !== undefined ? serializedElement.autostart as boolean : false,
    autostartDelay: serializedElement.autostartDelay !== undefined ? serializedElement.autostartDelay as number : 0,
    loop: serializedElement.loop !== undefined ? serializedElement.loop as boolean : false,
    startControl: serializedElement.startControl !== undefined ? serializedElement.startControl as boolean : true,
    pauseControl: serializedElement.pauseControl !== undefined ? serializedElement.pauseControl as boolean : false,
    progressBar: serializedElement.progressBar !== undefined ? serializedElement.progressBar as boolean : true,
    interactiveProgressbar: serializedElement.interactiveProgressbar !== undefined ?
      serializedElement.interactiveProgressbar as boolean : false,
    volumeControl: serializedElement.volumeControl !== undefined ? serializedElement.volumeControl as boolean : true,
    defaultVolume: serializedElement.defaultVolume !== undefined ? serializedElement.defaultVolume as number : 0.8,
    minVolume: serializedElement.minVolume !== undefined ? serializedElement.minVolume as number : 0,
    muteControl: serializedElement.muteControl !== undefined ? serializedElement.muteControl as boolean : true,
    hintLabel: serializedElement.hintLabel as string || '',
    hintLabelDelay: serializedElement.hintLabelDelay !== undefined ? serializedElement.hintLabelDelay as number : 0,
    uninterruptible:
      serializedElement.uninterruptible !== undefined ? serializedElement.uninterruptible as boolean : false,
    hideOtherPages:
      serializedElement.hideOtherPages !== undefined ? serializedElement.hideOtherPages as boolean : false,
    activeAfterID: serializedElement.activeAfterID as string || '',
    minRuns: serializedElement.minRuns !== undefined ? serializedElement.minRuns as number : 1,
    maxRuns: serializedElement.maxRuns !== undefined ? serializedElement.maxRuns as number | null : null,
    showRestRuns: serializedElement.showRestRuns !== undefined ? serializedElement.showRestRuns as boolean : false,
    showRestTime: serializedElement.showRestTime !== undefined ? serializedElement.showRestTime as boolean : true,
    playbackTime: serializedElement.playbackTime !== undefined ? serializedElement.playbackTime as number : 0
  };
}