import { Shared } from "./IShared";
import { SharePoint } from "./ISharePoint";
import { Enums } from '../extensibility';
export declare module Sites {
    interface IBaseSiteTemplate {
        id?: string;
        title?: string;
        description?: string;
    }
    interface ISiteTemplate {
        id?: string;
        title?: string;
        description?: string;
        createAsSiteCollection?: boolean;
        lcid?: number;
        storageMaximumLevel?: number;
        location?: string;
        icon?: ISiteTemplateIcon;
        image?: string;
        defaultTimeZone?: string;
        useCurrentSiteLocation?: boolean;
        baseTemplate?: string;
        permissionLevel?: number;
        userCanChangeLanguage?: boolean;
        uniquePermission?: boolean;
        siteCollectionFeatures?: Array<string>;
        siteFeatures?: Array<string>;
        isUserCreatedTemplate?: boolean;
        userDefinedProperties?: ISiteTemplateUserDefinedProperties;
        customFields?: Array<ISiteTemplateCustomField>;
        createdBy?: string;
        userCanChangePrivacy?: boolean;
        privacy?: Enums.PrivacyType;
        createAsOfficeGroup?: boolean;
        allowAdministrationOfSPGroups?: boolean;
    }
    interface IValidateSiteTemplateInfo {
        isExistSiteTemplate: boolean;
        isActivatedSiteDynamicProperties: boolean;
        isHaveProperties: boolean;
    }
    interface IMigrateSiteInfo {
        status: Enums.MigrateSitesStatus;
        startedDate?: string;
        sitesAlreadyMigrate: Array<string>;
        sitesNeedMigration: Array<string>;
    }
    interface ISiteTemplateUserDefinedProperties {
        approvers?: Array<SharePoint.IPeoplePickerPrincipal>;
        displayTo?: Array<SharePoint.IPeoplePickerPrincipal>;
        defaultAdministrator?: Array<SharePoint.IPeoplePickerPrincipal>;
        defaultVisitors?: Array<SharePoint.IPeoplePickerPrincipal>;
        templateGroup?: string;
        migrationInfo?: IMigrateSiteInfo;
    }
    interface ISiteTemplateIcon {
        iconType: Enums.SiteTemplateIconType;
        fontValue?: string;
        customValue?: string;
    }
    interface ISiteCreationValidation {
        siteTemplate?: ISiteTemplate;
        isFeatureDependencyValid: boolean;
        isUserPermissionValid: boolean;
    }
    interface ISiteTemplateCustomField {
        id?: string;
        displayName?: string;
        internalName?: string;
        fieldType?: Enums.CustomFieldTypes;
        isRequired?: boolean;
        isMultiple?: boolean;
        isFilterable?: boolean;
        isViewable?: boolean;
        termStoreId?: string;
        termGroupId?: string;
        termGroupName?: string;
        termSetId?: string;
        termSetName?: string;
        value?: any;
        fieldValidation?: ISiteTemplateCustomFieldValidation;
    }
    interface ISiteTemplateCustomFieldValidation {
        duplicatedDisplayName?: boolean;
        duplicatedInternalName?: boolean;
    }
    interface ISiteRequest {
        id?: string;
        siteTemplateId?: string;
        title?: string;
        description?: string;
        location?: string;
        url?: string;
        keywords?: Array<string>;
        lcid?: number;
        timeZone?: string;
        approvers?: string;
        owners?: Array<string>;
        members?: Array<string>;
        readers?: Array<string>;
        status?: Enums.SiteRequestStatus;
        requestType?: Enums.SiteRequestType;
        createdBy?: string;
        createdAt?: Date;
        processedBy?: string;
        processedAt?: Date;
        comment?: string;
        createdByUser?: SharePoint.IUser;
        urlValidateResult?: ISiteRequestUrlValidateResult;
        yammerGroupValidateResult?: ISiteRequestYammerGroupValidateResult;
        transactionId?: string;
        customFields?: Array<ISiteTemplateCustomField>;
        privacy?: Enums.PrivacyType;
        sendInvitationEmail?: boolean;
        isPublic?: boolean;
        allowAdministrationOfSPGroups?: boolean;
    }
    interface ISiteRequestResult {
        siteRequestId: string;
        transactionId: string;
    }
    interface ISiteRequestUrlValidateResult {
        urlValidated?: boolean;
        invalidUrl?: boolean;
        existedWeb?: Shared.IPortalWeb;
        validateUrlInProcess?: boolean;
        validateUrlTimeout?: any;
    }
    interface ISiteRequestYammerGroupValidateResult {
        groupValidated?: boolean;
        groupIsExisted?: boolean;
        validateGroupInProcess?: boolean;
        validateGroupTimeout?: any;
    }
    interface ISiteProvisioningResult {
        isSiteCreated: boolean;
        welcomePageUrl: string;
    }
    interface IOfficeGroupRequest {
        displayName?: string;
        alias?: string;
        isPublic?: boolean;
        optionalParams?: IOptionalParams;
    }
    interface IOptionalParams {
        Description?: string;
        Classification: string;
        CreationOptions: {
            results: Array<string>;
        };
    }
    interface IOfficeGroupResponse {
        documentsUrl?: any;
        errorMessage?: any;
        groupId?: string;
        siteStatus?: number;
        siteUrl?: string;
    }
}
