function details() {
  return {
    id: "Tdarr_Plugin_MC93_Migz2CleanTitle",
    Stage: "Pre-processing",
    Name: "Migz-Clean title metadata",
    Type: "Video",
    Operation: "Clean",
    Description: `This plugin removes title metadata from video/audio/subtitles, if it exists. Video checking is mandatory, audio and subtitles are optional.\n\n`,
    Version: "1.2",
    Link:
      "https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/Community/Tdarr_Plugin_MC93_Migz2CleanTitle.js",
    Tags: "pre-processing,ffmpeg,configurable",
    Inputs: [
      {
        name: "clean_audio",
        tooltip: `Specify if audio titles should be checked & cleaned. Optional.
  	            \\nExample:\\n
  	            true

  	            \\nExample:\\n
  	            false`,
      },
      {
        name: "clean_subtitles",
        tooltip: `Specify if subtitle titles should be checked & cleaned. Optional.
  	            \\nExample:\\n
  	            true

  	            \\nExample:\\n
  	            false`,
      },
    ],
  };
}

function plugin(file, librarySettings, inputs) {
  var response = {
    processFile: false,
    preset: "",
    container: "." + file.container,
    handBrakeMode: false,
    FFmpegMode: true,
    reQueueAfter: false,
    infoLog: "",
  };

  // Set up required variables.
  var ffmpegCommandInsert = "";
  var videoIdx = 0;
  var audioIdx = 0;
  var subtitleIdx = 0;
  var convert = false;

  // Check if file is a video. If it isn't then exit plugin.
  if (file.fileMedium !== "video") {
    console.log("File is not video");
    response.infoLog += "☒File is not video \n";
    response.processFile = false;
    return response;
  }

  // Check if overall file metadata title is not empty, if it's not empty set to "".
  if (typeof file.meta.Title != "undefined")
    try {
      ffmpegCommandInsert += ` -metadata title="" `;
      convert = true;
    } catch (err) {}

  // Go through each stream in the file.
  for (var i = 0; i < file.ffProbeData.streams.length; i++)
    try {
      // Check if stream is a video.
      if (file.ffProbeData.streams[i].codec_type.toLowerCase() == "video") {
        // Check if stream title is not empty, if it's nto empty set to "".
        if (typeof file.ffProbeData.streams[i].tags.title != "undefined") {
          response.infoLog += `☒Video stream title is not empty, most likely junk metadata. Removing title from stream ${i} \n`;
          ffmpegCommandInsert += ` -metadata:s:v:${videoIdx} title="" `;
          convert = true;
        }
        // Increment videoIdx.
        videoIdx++;
      }

      // Check if title metadata of audio stream has more then 3 full stops. If so then it's likely to be junk metadata so remove.
      if (
        file.ffProbeData.streams[i].codec_type.toLowerCase() == "audio" &&
        inputs.clean_audio.toLowerCase() == "true"
      ) {
        if (file.ffProbeData.streams[i].tags.title.split(".").length - 1 > 3) {
          response.infoLog += `☒More then 3 full stops detected in audio title, likely to be junk metadata. Removing title from stream ${i} \n`;
          ffmpegCommandInsert += ` -metadata:s:a:${audioIdx} title="" `;
          convert = true;
        }
        // Increment audioIdx.
        audioIdx++;
      }

      // Check if title metadata of subtitle stream has more then 3 full stops. If so then it's likely to be junk metadata so remove.
      if (
        file.ffProbeData.streams[i].codec_type.toLowerCase() == "subtitle" &&
        inputs.clean_subtitles.toLowerCase() == "true"
      ) {
        if (file.ffProbeData.streams[i].tags.title.split(".").length - 1 > 3) {
          response.infoLog += `☒More then 3 full stops detected in subtitle title, likely to be junk metadata. Removing title from stream ${i} \n`;
          ffmpegCommandInsert += ` -metadata:s:s:${subtitleIdx} title="" `;
          convert = true;
        }
        // Increment subtitleIdx.
        subtitleIdx++;
      }
    } catch (err) {}

  // Convert file if convert variable is set to true.
  if (convert == true) {
    response.infoLog += "☒File has title metadata. Removing \n";
    response.preset = `,${ffmpegCommandInsert} -c copy -map 0 -max_muxing_queue_size 4096`;
    response.reQueueAfter = true;
    response.processFile = true;
  } else {
    response.infoLog += "☑File has no title metadata \n";
  }
  return response;
}
module.exports.details = details;
module.exports.plugin = plugin;
