// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {LitElement, html} from 'lit-element';

import {connectStore} from 'reducers/base.js';
import * as issueV0 from 'reducers/issueV0.js';
import './mr-phase.js';

/**
 * `<mr-launch-overview>`
 *
 * This is a shorthand view of the phases for a user to see a quick overview.
 *
 */
export class MrLaunchOverview extends connectStore(LitElement) {
  /** @override */
  render() {
    return html`
      <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
            rel="stylesheet">
      <style>
        mr-launch-overview {
          max-width: 100%;
          display: flex;
          flex-flow: column;
          justify-content: flex-start;
          align-items: stretch;
        }
        mr-launch-overview[hidden] {
          display: none;
        }
        mr-phase {
          margin-bottom: 0.75em;
        }
      </style>
      ${this.phases.map((phase) => html`
        <mr-phase
          .phaseName=${phase.phaseRef.phaseName}
          .approvals=${this._approvalsForPhase(this.approvals, phase.phaseRef.phaseName)}
        ></mr-phase>
      `)}
      ${this._phaselessApprovals.length ? html`
        <mr-phase .approvals=${this._phaselessApprovals}></mr-phase>
      `: ''}
    `;
  }

  /** @override */
  static get properties() {
    return {
      approvals: {type: Array},
      phases: {type: Array},
      hidden: {
        type: Boolean,
        reflect: true,
      },
    };
  }

  /** @override */
  createRenderRoot() {
    return this;
  }

  /** @override */
  constructor() {
    super();
    this.approvals = [];
    this.phases = [];
    this.hidden = true;
  }

  /** @override */
  stateChanged(state) {
    if (!issueV0.viewedIssue(state)) return;

    this.approvals = issueV0.viewedIssue(state).approvalValues || [];
    this.phases = issueV0.viewedIssue(state).phases || [];
  }

  /** @override */
  update(changedProperties) {
    if (changedProperties.has('phases') || changedProperties.has('approvals')) {
      this.hidden = !this.phases.length && !this.approvals.length;
    }
    super.update(changedProperties);
  }

  get _phaselessApprovals() {
    return this._approvalsForPhase(this.approvals);
  }

  _approvalsForPhase(approvals, phaseName) {
    return (approvals || []).filter((a) => {
      // We can assume phase names will be unique.
      return a.phaseRef.phaseName == phaseName;
    });
  }
}
customElements.define('mr-launch-overview', MrLaunchOverview);
