module.exports.details = function details() {
  return {
    id: "Tdarr_Plugin_075a_Transcode_Customisable",
    Stage: "Pre-processing",
    Name: "Video Transcode Customisable",
    Type: "",
    Operation: "Transcode",
    Description: `[TESTING][Contains built-in filter] Specify codec filter and transcode arguments for HandBrake or FFmpeg  \n\n`,
    Version: "1.00",
    Link: "",
    Tags: "pre-processing,handbrake,ffmpeg,configurable",
    Inputs: [
      {
        name: "codecs_to_exclude",
        tooltip: `Input codecs, separated by a comma, that should be excluded when processing.

        \\nFor example, if you're transcoding into hevc (h265), then add a filter to prevent hevc being transcoded so your newly transcoded files won't be infinitely looped/processed. \\n

        
        \\nCommon video codecs:

        \\nmpeg4
        \\nhevc
        \\nh264
        \\nmpeg2video
        \\ntheora
        \\nvp8
        \\nvp9
        
        
        \\nExample:\\n

        hevc

        \\nYou can also enter multiple codecs:

        \\nExample:\\n

        mp3,aac,dts

        \\nExample:\\n

        h264,vp9
 
        `,
      },
      {
        name: "cli",
        tooltip: `Enter the CLI to use.
        
        \\nExample:\\n
        handbrake

        \\nExample:\\n
        ffmpeg
        
        `,
      },
      {
        name: "transcode_arguments",
        tooltip: `\\nEnter HandBrake or FFmpeg transcode arguments.
        
        \\nHandBrake examples:

        \\nExample:\\n
        -e x264 -q 20 -B
        
        \\nExample:\\n
        -Z "Very Fast 1080p30"
        
        \\nExample:\\n
        -Z "Fast 1080p30" -e nvenc_h265
        
        \\nExample:\\n
        -Z "Very Fast 1080p30" --all-subtitles --all-audio
        
        \\nExample:\\n
        -Z "Very Fast 480p30"
        
        \\nExample:\\n
        --preset-import-file "C:\Users\HaveAGitGat\Desktop\testpreset.json" -Z "My Preset"
        
        \\nYou can learn more about HandBrake presets here:

        \\nhttps://handbrake.fr/docs/en/latest/technical/official-presets.html
        

        \\nWhen using FFmpeg, you need to separate the input and output parameters with a comma. FFmpeg Examples:

        \\nExample:\\n
-r 1,-r 24

\\nExample:\\n
,-sn -c:v copy -c:a copy

\\nExample:\\n
,-c:v lib265 -crf 23 -ac 6 -c:a aac -preset veryfast

\\nExample:\\n
,-map 0 -c copy -c:v libx265 -c:a aac

\\nExample:\\n
-c:v h264_cuvid,-c:v hevc_nvenc -preset slow -c:a copy

\\nPlease see the following for help with creating FFmpeg commands:

\\nhttps://opensource.com/article/17/6/ffmpeg-convert-media-file-formats
        
        
        
        
        `,
      },
      {
        name: "output_container",
        tooltip: `
        \\nEnter the output container of the new file

        \\nExample:\\n
        .mp4

        \\nExample:\\n
        .mp3

        \\nExample:\\n
        .mkv
        
        `,
      },
    ],
  };
};

module.exports.plugin = function plugin(file, librarySettings, inputs) {
  //Must return this object

  var response = {
    processFile: false,
    preset: "",
    container: ".mp4",
    handBrakeMode: false,
    FFmpegMode: false,
    reQueueAfter: false,
    infoLog: "",
  };

  if (
    inputs.codecs_to_exclude === undefined ||
    inputs.cli === undefined ||
    inputs.transcode_arguments === undefined ||
    inputs.output_container === undefined
  ) {
    response.processFile = false;
    response.infoLog += "☒ Inputs not entered! \n";
    return response;
  }

  if (
    inputs.codecs_to_exclude.includes(file.ffProbeData.streams[0].codec_name)
  ) {
    response.processFile = false;
    response.infoLog += `☑File is already in ${file.ffProbeData.streams[0].codec_name}! \n`;
    return response;
  }

  //transcode settings

  if (inputs.cli == `handbrake`) {
    response.handBrakeMode = true;
    response.FFmpegMode = false;
  } else if (inputs.cli == `ffmpeg`) {
    response.handBrakeMode = false;
    response.FFmpegMode = true;
  } else {
    response.processFile = false;
    response.infoLog += "☒ CLI not input correctly! \n";
    return response;
  }

  response.processFile = true;
  response.preset = inputs.transcode_arguments;
  response.container = inputs.output_container;

  response.reQueueAfter = true;
  response.infoLog += `☒File is not in desired codec! \n`;
  return response;
};
