/*
 * 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 { GitHubId } from "./GitHubId";
import { Issue } from "./Issue";
import { PullRequest } from "./PullRequest";
import { Review } from "./Review";
export { Comment };

/**
 * Type Comment
 */
interface Comment extends GraphNode {

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

    /**
     * by - Comment -> GitHubId
     *
     * @property {GitHubId} by
     */
    readonly by: GitHubId;

    /**
     * commentType
     *
     * @property {"review" | "pullRequest" | "issue"} commentType
     */
    readonly commentType: "review" | "pullRequest" | "issue";

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

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

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

    /**
     * issue - Comment -> Issue
     *
     * @property {Issue} issue
     */
    readonly issue: Issue;

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

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

    /**
     * pullRequest - Comment -> PullRequest
     *
     * @property {PullRequest} pullRequest
     */
    readonly pullRequest: PullRequest;

    /**
     * review - Comment -> Review
     *
     * @property {Review} review
     */
    readonly review: Review;

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

}
