/*
 * Copyright 2015-2017 Atomist Inc.
 *
 * 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.
 */

import { TreeNode, GraphNode, FormatInfo, PathExpressionEngine } from "@atomist/rug/tree/PathExpression";
import { ProjectContext } from "@atomist/rug/operations/ProjectEditor";
import { Application } from "./Application";
import { Build } from "./Build";
import { Fingerprint } from "./Fingerprint";
import { GitHubId } from "./GitHubId";
import { HerokuApp } from "./HerokuApp";
import { Issue } from "./Issue";
import { ParentImpact } from "./ParentImpact";
import { PullRequest } from "./PullRequest";
import { Push } from "./Push";
import { Repo } from "./Repo";
import { Status } from "./Status";
import { Tag } from "./Tag";
export { Commit };

/**
 * Type Commit
 */
interface Commit extends GraphNode {

    /**
     * apps - Commit -> Application
     *
     * @property {Application[]} apps
     */
    readonly apps: Application[];

    /**
     * author - Commit -> GitHubId
     *
     * @property {GitHubId} author
     */
    readonly author: GitHubId;

    /**
     * builds - Commit -> Build
     *
     * @property {Build[]} builds
     */
    readonly builds: Build[];

    /**
     * committer - Commit -> GitHubId
     *
     * @property {GitHubId} committer
     */
    readonly committer: GitHubId;

    /**
     * fingerprints - Commit -> Fingerprint
     *
     * @property {Fingerprint[]} fingerprints
     */
    readonly fingerprints: Fingerprint[];

    /**
     * herokuApps - Commit -> HerokuApp
     *
     * @property {HerokuApp[]} herokuApps
     */
    readonly herokuApps: HerokuApp[];

    /**
     * impact - Commit -> ParentImpact
     *
     * @property {ParentImpact} impact
     */
    readonly impact: ParentImpact;

    /**
     * message
     *
     * @property {string} message
     */
    readonly message: string;

    /**
     * pullRequests - Commit -> PullRequest
     *
     * @property {PullRequest[]} pullRequests
     */
    readonly pullRequests: PullRequest[];

    /**
     * pushes - Commit -> Push
     *
     * @property {Push[]} pushes
     */
    readonly pushes: Push[];

    /**
     * repo - Commit -> Repo
     *
     * @property {Repo} repo
     */
    readonly repo: Repo;

    /**
     * resolves - Commit -> Issue
     *
     * @property {Issue[]} resolves
     */
    readonly resolves: Issue[];

    /**
     * sha
     *
     * @property {string} sha
     */
    readonly sha: string;

    /**
     * statuses - Commit -> Status
     *
     * @property {Status[]} statuses
     */
    readonly statuses: Status[];

    /**
     * tags - Commit -> Tag
     *
     * @property {Tag[]} tags
     */
    readonly tags: Tag[];

    /**
     * timestamp
     *
     * @property {string} timestamp
     */
    readonly timestamp: string;

}
