/*
 * 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 { Branch } from "./Branch";
import { ChannelLink } from "./ChannelLink";
import { ChatChannel } from "./ChatChannel";
import { Issue } from "./Issue";
import { Label } from "./Label";
import { Org } from "./Org";
import { PullRequest } from "./PullRequest";
export { Repo };

/**
 * Type Repo
 */
interface Repo extends GraphNode {

    /**
     * branches - Repo -> Branch
     *
     * @property {Branch[]} branches
     */
    readonly branches: Branch[];

    /**
     * channels - Repo -> ChatChannel
     *
     * @property {ChatChannel[]} channels
     */
    readonly channels: ChatChannel[];

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

    /**
     * issue - Repo -> Issue
     *
     * @property {Issue[]} issue
     */
    readonly issue: Issue[];

    /**
     * labels - Repo -> Label
     *
     * @property {Label[]} labels
     */
    readonly labels: Label[];

    /**
     * links - Repo -> ChannelLink
     *
     * @property {ChannelLink[]} links
     */
    readonly links: ChannelLink[];

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

    /**
     * org - Repo -> Org
     *
     * @property {Org} org
     */
    readonly org: Org;

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

    /**
     * pullRequest - Repo -> PullRequest
     *
     * @property {PullRequest[]} pullRequest
     */
    readonly pullRequest: PullRequest[];

}
