// Copyright 2019 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

const kNewline = '\r\n';

const kMediaConsoleFrame = 'mediaConsoleFrame';

const videoCodecFamilies = ['av01', 'avc1', 'avc3', 'hev1', 'hvc1', 'vp09',
      'vp8', 'vp9'];
const audioCodecFamilies = ['ac-3', 'ec-3', 'mp4a', 'opus', 'vorbis'];

const kAltModifier = 'A-';
const kCtrlModifier = 'C-';

function MediaConsole(debuggerClient) {
  let mediaConsoleNode = document.getElementById('mediaConsole');

  this.debuggerClient = debuggerClient;
  this.getDisabledMediaCodecs = window.debugHub.cVal.getValue.bind(
      window.debugHub.cVal, 'Media.DisabledMediaCodecs');
  this.setDisabledMediaCodecs = window.debugHub.sendConsoleCommand.bind(
      window.debugHub, 'disable_media_codecs');
  this.lastUpdateTime = window.performance.now();
  this.updatePeriod = 1000;

  // Registry of all the hotkeys and their function handlers.
  // NOTE: This is not the full list, since more will be added once the codec
  // specific controls are registered.
  this.hotkeyRegistry = new Map([
      ['p', {handler: this.onPlayPause.bind(this), help: '(p)ause/(p)lay'}],
      [']', {handler: this.onIncreasePlaybackRate.bind(this),
        help: '(])Increase Playback Rate'}],
      ['[', {handler: this.onDecreasePlaybackRate.bind(this),
        help: '([)Decrease Playback Rate'}],
  ]);

  this.hotkeyHelpNode = document.createTextNode('');
  mediaConsoleNode.appendChild(this.hotkeyHelpNode);

  // Dynamically added div will be changed as we get state information.
  let playerStateElem = document.createElement('div');
  this.playerStateText = document.createTextNode('');
  playerStateElem.appendChild(this.playerStateText);
  mediaConsoleNode.appendChild(playerStateElem);

  this.printToMediaConsoleCallback = this.printToMediaConsole.bind(this);
  this.codecSupportMap = new Map();
  this.isInitialized = false;
}

MediaConsole.prototype.setVisible = function(visible) {
  if (visible) {
    this.initialize();
  }
}

MediaConsole.prototype.initialize = function() {
  if (this.initialized) { return; }

  this.debuggerClient.attach();
  this.initializeMediaConsoleContext();
  this.initializeSupportedCodecs();

  // Since |initializeSupportedCodecs| is resolved asynchronously, we need to
  // wait until |codecSupportMap| is fully populated before finishing the rest
  // of the initialization.
  if (this.codecSupportMap.size > 0) {
    this.registerCodecHotkeys();
    this.generateHotkeyHelpText();
    this.isInitialized = true;
  }
}

MediaConsole.prototype.initializeMediaConsoleContext = function() {
  let js = debugHub.readDebugContentText('console/media_console_context.js');
  this.debuggerClient.evaluate(js);
}

MediaConsole.prototype.initializeSupportedCodecs = function() {
  if (this.codecSupportMap.size > 0) {
    return;
  }

  function handleSupportQueryResponse(response) {
    let results = JSON.parse(response.result.value);
    results.forEach(record => {
      let codecFamily = record[0];
      let isSupported = record[1] || !!this.codecSupportMap.get(codecFamily);
      this.codecSupportMap.set(codecFamily, isSupported);
    });
  };

  this.debuggerClient.evaluate(`_mediaConsoleContext.getSupportedCodecs()`,
      handleSupportQueryResponse.bind(this));
}

MediaConsole.prototype.registerCodecHotkeys = function() {
  // Codec control hotkeys are of the form: Modifier + Number.
  // Due to the large number of codecs, we split all the video codecs into Ctrl
  // and all the audio codecs into Alt.
  // "C-" prefix indicates a key with the ctrlKey modifier.
  // "A-" prefix indicates a key with the altKey modifier.
  // Additionally, we only register those hotkeys that we filter as supported.
  function registerCodecHotkey(modifier, codec, index) {
    if (!this.codecSupportMap.get(codec)) {
      return;
    }
    let modAndNum = `${modifier}${index + 1}`;
    let helpStr = `( ${modAndNum} ) ${codec}`;
    this.hotkeyRegistry.set(modAndNum, {
      handler: this.onToggleCodec.bind(this, codec),
      help: helpStr
    });
  };
  videoCodecFamilies.forEach(registerCodecHotkey.bind(this, kCtrlModifier));
  audioCodecFamilies.forEach(registerCodecHotkey.bind(this, kAltModifier));
}

MediaConsole.prototype.generateHotkeyHelpText = function() {
  // Generate the help text that will be displayed at the top of the console
  // output.
  let hotkeysHelp = `Hotkeys: ${kNewline}`;
  hotkeysHelp += `Ctrl+Num toggles video codecs ${kNewline}`;
  hotkeysHelp += `Alt+Num toggles audio codecs ${kNewline}`;
  const generateHelpText = function(hotkeyInfo, hotkey, map) {
    hotkeysHelp += hotkeyInfo.help + ', ';
  };
  this.hotkeyRegistry.forEach(generateHelpText);
  hotkeysHelp = hotkeysHelp.substring(0, hotkeysHelp.length-2);
  hotkeysHelp += kNewline;
  hotkeysHelp += kNewline;
  hotkeysHelp += kNewline;

  this.hotkeyHelpNode.nodeValue = hotkeysHelp;
}

MediaConsole.prototype.parseStateFromResponse = function(response) {
  // TODO: Handle the situation where the response contains exceptionDetails.
  // https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-evaluate
  return JSON.parse(response.result.value);
}

MediaConsole.prototype.printToMediaConsole = function(response) {
  const state = this.parseStateFromResponse(response);
  let videoStatus = 'No primary video.';
  if(state.hasPrimaryVideo) { videoStatus = ''; }
  this.playerStateText.textContent =
      `Primary Video: ${videoStatus} ${kNewline} \
      Paused: ${state.paused} ${kNewline} \
      Current Time: ${state.currentTime} ${kNewline} \
      Duration: ${state.duration} ${kNewline} \
      Playback Rate: ${state.playbackRate} \
      (default: ${state.defaultPlaybackRate}) ${kNewline} \
      Disabled Media Codecs: ${state.disabledMediaCodecs}`;
}

MediaConsole.prototype.update = function() {
  const t = window.performance.now();
  if (t > this.lastUpdateTime + this.updatePeriod) {
    this.lastUpdateTime = t;
    this.debuggerClient.evaluate('_mediaConsoleContext.getPlayerState()',
        this.printToMediaConsoleCallback);
  }
}

MediaConsole.prototype.onWheel = function(event) {}

MediaConsole.prototype.onKeyup = function(event) {}

MediaConsole.prototype.onKeypress = function(event) {}

MediaConsole.prototype.onInput = function(event) {}

MediaConsole.prototype.onKeydown = function(event) {
  let matchedHotkeyEntry = null;
  this.hotkeyRegistry.forEach(function(hotkeyInfo, hotkey, map) {
    let eventKey = event.key;
    if(event.altKey) { eventKey = kAltModifier + eventKey; }
    if(event.ctrlKey) { eventKey = kCtrlModifier + eventKey; }
    if(eventKey == hotkey) {
      matchedHotkeyEntry = hotkeyInfo;
    }
  });
  if (matchedHotkeyEntry) {
    matchedHotkeyEntry.handler();
  }
}

MediaConsole.prototype.onPlayPause = function() {
  this.debuggerClient.evaluate('_mediaConsoleContext.togglePlayPause()',
      this.printToMediaConsoleCallback);
}

MediaConsole.prototype.onIncreasePlaybackRate = function() {
  this.debuggerClient.evaluate('_mediaConsoleContext.increasePlaybackRate()',
      this.printToMediaConsoleCallback);
}

MediaConsole.prototype.onDecreasePlaybackRate = function() {
  this.debuggerClient.evaluate('_mediaConsoleContext.decreasePlaybackRate()',
      this.printToMediaConsoleCallback);
}

MediaConsole.prototype.onToggleCodec = function(codecToToggle) {
  let codecs = this.getDisabledMediaCodecs().split(";");
  codecs = codecs.filter(s => s.length > 0);
  toggled = codecs.filter(c => c != codecToToggle);
  if(codecs.length == toggled.length) { toggled.push(codecToToggle); }
  this.setDisabledMediaCodecs(toggled.join(';'));
}
