/*
 * 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 { ChatChannel } from "./ChatChannel";
import { ChatTeam } from "./ChatTeam";
import { Email } from "./Email";
import { Person } from "./Person";
import { UserPreferences } from "./UserPreferences";
export { ChatId };

/**
 * Type ChatId
 */
interface ChatId extends GraphNode {

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

    /**
     * channelsCreated - ChatId -> ChatChannel
     *
     * @property {ChatChannel[]} channelsCreated
     */
    readonly channelsCreated: ChatChannel[];

    /**
     * chatTeam - ChatId -> ChatTeam
     *
     * @property {ChatTeam} chatTeam
     */
    readonly chatTeam: ChatTeam;

    /**
     * emails - ChatId -> Email
     *
     * @property {Email[]} emails
     */
    readonly emails: Email[];

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

    /**
     * isAdmin
     *
     * @property {boolean} isAdmin
     */
    readonly isAdmin: boolean;

    /**
     * isAtomistBot
     *
     * @property {boolean} isAtomistBot
     */
    readonly isAtomistBot: boolean;

    /**
     * isBot
     *
     * @property {boolean} isBot
     */
    readonly isBot: boolean;

    /**
     * isOwner
     *
     * @property {boolean} isOwner
     */
    readonly isOwner: boolean;

    /**
     * isPrimaryOwner
     *
     * @property {boolean} isPrimaryOwner
     */
    readonly isPrimaryOwner: boolean;

    /**
     * person - ChatId -> Person
     *
     * @property {Person} person
     */
    readonly person: Person;

    /**
     * preferences - ChatId -> UserPreferences
     *
     * @property {UserPreferences} preferences
     */
    readonly preferences: UserPreferences;

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

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

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

}
