/**
 * @license
 * Copyright (C) 2020 The Android Open Source Project
 *
 * 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.
 */

// Ugly import path due to the following bugs:
// https://github.com/bazelbuild/rules_nodejs/issues/1522
// https://github.com/bazelbuild/rules_nodejs/issues/1380
import {PackageInfo, LicenseType, LicenseInfo} from "../../../tools/node_tools/node_modules_licenses/package-license-info";
import * as path from "path";

class LicenseTypes {
  public static Mit: LicenseType = {
    name: "MIT",
    allowed: true
  };
  public static Apache2_0: LicenseType = {
    name: "Apache 2.0",
    allowed: true
  };

  public static Bsd3: LicenseType = {
    name: "BSD-3-Clause",
    allowed: true
  };
}

/** List of licenses texts. Add the licenses here if there is no text file with license
 * in package. For details - see comments for {@link LicenseInfo} and {@link PackageInfo} */
class SharedLicenses {
  public static Polymer2014: LicenseInfo = {
    name: "Polymer-2014",
    type: LicenseTypes.Bsd3,
    sharedLicenseFile: "polymer-2014.txt",
  };

  public static Polymer2015: LicenseInfo = {
    name: "Polymer-2015",
    type: LicenseTypes.Bsd3,
    sharedLicenseFile: "polymer-2015.txt",
  };

  public static Polymer2017: LicenseInfo = {
    name: "Polymer-2017",
    type: LicenseTypes.Bsd3,
    sharedLicenseFile: "polymer-2017.txt",
  };

  public static Polymer2018: LicenseInfo = {
    name: "Polymer-2018",
    type: LicenseTypes.Bsd3,
    sharedLicenseFile: "polymer-2018.txt",
  };

  public static IsArray: LicenseInfo = {
    name: "isarray",
    type: LicenseTypes.Mit,
    sharedLicenseFile: "isarray.txt"
  };

  public static Page: LicenseInfo = {
    name: "page",
    type: LicenseTypes.Mit,
    sharedLicenseFile: "page.txt"
  }
}

const fontsRobotoFilter = (fileName: string) =>
    fileName.startsWith("fonts/roboto/") && path.basename(fileName) !== "DESCRIPTION.en_us.html";

const fontsRobotomonoFilter = (fileName: string) =>
    fileName.startsWith("fonts/robotomono/") && path.basename(fileName) !== "DESCRIPTION.en_us.html";


const packages: PackageInfo[] = [
  {
    name: "@polymer/decorators",
    license: SharedLicenses.Polymer2017,
  },
  {
    name: "@polymer/font-roboto",
    license: SharedLicenses.Polymer2015,
  },
  {
    name: "@polymer/font-roboto-local",
    license: SharedLicenses.Polymer2015,
    filesFilter: fileName => !fontsRobotoFilter(fileName) && !fontsRobotomonoFilter(fileName)
  },
  {
    name: "@polymer/font-roboto-local",
    license: {
      name: "font-roboto-local-fonts-roboto",
      type: LicenseTypes.Apache2_0,
      packageLicenseFile: "fonts/roboto/LICENSE.txt"
    },
    filesFilter: fontsRobotoFilter
  },
  {
    name: "@polymer/font-roboto-local",
    license: {
      name: "font-roboto-local-fonts-robotomono",
      type: LicenseTypes.Apache2_0,
      packageLicenseFile: "fonts/robotomono/LICENSE.txt"
    },
    filesFilter: fontsRobotomonoFilter
  },
  {
    name: "@polymer/iron-a11y-announcer",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-a11y-keys-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-autogrow-textarea",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-behaviors",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-checked-element-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-dropdown",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-fit-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-flex-layout",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-form-element-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-icon",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-iconset-svg",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-input",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-menu-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-meta",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-overlay-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-resizable-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-selector",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/iron-validatable-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/neon-animation",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-behaviors",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-button",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-dialog",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-dialog-behavior",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-dialog-scrollable",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-icon-button",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-input",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-item",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-listbox",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-ripple",
    license: SharedLicenses.Polymer2014
  },
  {
    name: "@polymer/paper-styles",
    license: SharedLicenses.Polymer2014
  },
  {
    name: "@polymer/paper-tabs",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/paper-toggle-button",
    license: SharedLicenses.Polymer2015
  },
  {
    name: "@polymer/polymer",
    license: SharedLicenses.Polymer2017
  },
  {
    name: "@webcomponents/shadycss",
    license: SharedLicenses.Polymer2017
  },
  {
    name: "@webcomponents/webcomponentsjs",
    license: SharedLicenses.Polymer2018
  },
  {
    name: "ba-linkify",
    license: {
      name: "ba-linkify",
      type: LicenseTypes.Mit,
      packageLicenseFile: "LICENSE-MIT",
    }
  },
  {
    name: "isarray",
    license: SharedLicenses.IsArray
  },
  {
    name: "page",
    license: SharedLicenses.Page
  },
  {
    name: "path-to-regexp",
    license: {
      name: "path-to-regexp",
      type: LicenseTypes.Mit,
      packageLicenseFile: "LICENSE"
    }
  },
  {
    name: "polymer-resin",
    license: SharedLicenses.Polymer2018
  },
  {
    name: "polymer-bridges",
    license: SharedLicenses.Polymer2018
  }
];

export default packages;
