import { SharedContracts } from './shared-contracts';

export namespace SubscriptionContracts {
    export interface ISubscriptionProjectEnvironmentContract {
        id: string;
        name: string;
    }

    export interface ISubscriptionProjectContract {
        id: string;
        is_active: boolean;
        name: string;
        environments: ISubscriptionProjectEnvironmentContract[];
    }

    export interface IListSubscriptionProjectsResponseContract {
        pagination: SharedContracts.IPaginationModelContract;
        projects: ISubscriptionProjectContract[];
    }

    export interface IListSubscriptionUsersResponseContract {
        pagination: SharedContracts.IPaginationModelContract;
        users: ISubscriptionUserContract[];
    }

    export interface ISubscriptionCollectionGroupContract {
        collections: SharedContracts.IReferenceObjectContract[];
        roles: ISubscriptionUserRoleContract[];
    }

    export interface ISubscriptionUserRoleLanguageContract {
      id: string;
      external_id?: string;
      codename: string;
      name: string;
      is_active: boolean;
    }

    export interface ISubscriptionUserRoleContract {
        id: string;
        name: string;
        codename: string;
        languages: ISubscriptionUserRoleLanguageContract[];
    }

    export interface ISubscriptionUserEnvironmentContract {
        id: string;
        name: string;
        is_user_active: boolean;
        last_activity_at?: string;
        collection_groups: ISubscriptionCollectionGroupContract[];
    }

    export interface ISubscriptionUserProjectContract {
        id: string;
        name: string;
        environments: ISubscriptionUserEnvironmentContract[];
    }

    export interface ISubscriptionUserContract {
        id: string;
        email: string;
        has_pending_invitation: boolean;
        projects: ISubscriptionUserProjectContract[];

        first_name?: string;
        last_name?: string;
    }
}
