/********************************************************************************
 * Copyright (c) 2020 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 ********************************************************************************/

import {Pipe, PipeTransform} from "@angular/core";
import {IStatementTableEntry} from "../../../shared/layout/statement-table/model";
import {IStatementEntityWithTasks} from "../../../store/statements/model";
import {arrayJoin} from "../../../util/store";

@Pipe({name: "getDashboardEntries"})
export class GetDashboardEntriesPipe implements PipeTransform {

    public transform(value: IStatementEntityWithTasks[], editedByMe?: boolean): IStatementTableEntry[] {
        return arrayJoin(value)
            .filter((statement) => statement?.info?.id != null)
            .filter((statement) => !editedByMe || statement.editedByMe)
            .map((statement) => {
                const {
                    mandatoryContributionsCount,
                    mandatoryDepartmentsCount,
                    optionalForMyDepartment,
                    completedForMyDepartment,
                    tasks,
                    info
                } = statement;

                const contributionStatus: string = Number.isFinite(mandatoryDepartmentsCount) ?
                    `${Number.isFinite(mandatoryContributionsCount) ? mandatoryContributionsCount : 0}/${mandatoryDepartmentsCount}` :
                    "-";

                const contributionStatusForMyDepartment: boolean = completedForMyDepartment ?
                    true :
                    (optionalForMyDepartment ? null : false);

                const {name, taskDefinitionKey} = {...arrayJoin(tasks)[0]};

                return {
                    ...info,
                    contributionStatus,
                    contributionStatusForMyDepartment,
                    currentTaskName: name == null ? taskDefinitionKey : name
                };
            });
    }

}
