<dom-module id="coverage-plugin">
  <script>
    function populateWithDummyData(coverageData) {
      coverageData['NewFile'] = {
        linesMissingCoverage: [1, 2, 3],
        totalLines: 5,
        changeNum: 94,
        patchNum: 2,
      };
      coverageData['/COMMIT_MSG'] = {
        linesMissingCoverage: [3, 4, 7, 14],
        totalLines: 14,
        changeNum: 94,
        patchNum: 2,
      };
      coverageData['DEPS'] = {
        linesMissingCoverage: [3, 4, 7, 14],
        totalLines: 16,
        changeNum: 77001,
        patchNum: 1,
      };
      coverageData['go/sklog/sklog.go'] = {
        linesMissingCoverage: [3, 322, 323, 324],
        totalLines: 350,
        changeNum: 85963,
        patchNum: 13,
      };
    }

    Gerrit.install(plugin => {
      const coverageData = {};
      let displayCoverage = false;
      const annotationApi = plugin.annotationApi();
      const styleApi = plugin.styles();

      const coverageStyle = styleApi.css('background-color: #EF9B9B !important');
      const emptyStyle = styleApi.css('');

      annotationApi.addLayer(context => {
        if (Object.keys(coverageData).length === 0) {
          // Coverage data is not ready yet.
          return;
        }
        const path = context.path;
        const line = context.line;
        // Highlight lines missing coverage with this background color if
        // coverage should be displayed, else do nothing.
        const annotationStyle = displayCoverage
          ? coverageStyle
          : emptyStyle;
        if (coverageData[path] &&
              coverageData[path].changeNum === context.changeNum &&
              coverageData[path].patchNum === context.patchNum) {
          const linesMissingCoverage = coverageData[path].linesMissingCoverage;
          if (linesMissingCoverage.includes(line.afterNumber)) {
            context.annotateRange(0, line.text.length, annotationStyle, 'right');
            context.annotateLineNumber(annotationStyle, 'right');
          }
        }
      }).enableToggleCheckbox('Display Coverage', checkbox => {
        // Checkbox is attached so now add the notifier that will be controlled
        // by the checkbox.
        annotationApi.addNotifier(notifyFunc => {
          new Promise(resolve => setTimeout(resolve, 3000)).then(() => {
            populateWithDummyData(coverageData);
            checkbox.disabled = false;
            checkbox.onclick = e => {
              displayCoverage = e.target.checked;
              Object.keys(coverageData).forEach(file => {
                notifyFunc(file, 0, coverageData[file].totalLines, 'right');
              });
            };
          });
        });
      });
    });
  </script>
</dom-module>
