import mongoose from "mongoose";
import { AgentInterface } from "./agent.interface";
import { GooglePlacesInterface, ProjectGooglePlacesInterface } from "./google-places";
import { TenantInterface } from "./tenant.interface";
import { TemplateDesignInterface } from "./whitelabel.interface";
export * from "./agent.interface";
export * from "./blog.interface";
export * from "./contact.interface";
export * from "./leads.interface";
export * from "./office.interface";
export * from "./project.interface";
export * from "./properties/appraisal.interface";
export * from "./properties/listing.interface";
export * from "./properties/prospect";
export * from "./tenant.interface";
export * from "./testimonial.interface";
export * from "./TokenData.interface";
export * from "./user.interface";
export * from "./notification.interface";
export * from "./whitelabel.interface";
export * from "./industry-report.interface";
export * from "./transaction";
export declare type PermissionTypeEnum = "EVERYONE" | "SELECT" | "EXCLUSIVE";
export declare type SourceList = "Website" | "Facebook" | "Instagram" | "Phone-in" | "Newspaper" | "Wolk-in" | "Door Knoking" | "Other";
export declare type EmployeeType = "Administrator" | "Director" | "Personal Sisten" | "Office Admin" | "Agent Repesentative" | "Property Management" | "Sales Repesentative" | "Inactive";
export declare const EmployeeTypeData: string[];
export declare type TenantType = "Developer" | "Agency" | "Geonet" | "Aggregator" | "M2" | "Builder";
export declare type BlogDisplay = "APPS" | "WEBSITE" | "BOTH";
export declare type StatusType = "Active" | "Archived";
export declare type EditorState = "ADD" | "DELETE" | "UPDATE" | "VIEW";
export * from "./tripadvisor";
export interface Cordinat {
    lat: number;
    lng: number;
}
export interface CategoryInterface extends AuditInterface {
    name?: string;
    shortDescription?: string;
    description?: string;
    slug?: string;
    parentCategoryId?: string;
    parentCategory?: CategoryInterface;
    bannerURL?: string;
    thumbnailURL?: string;
    status?: StatusType;
}
export interface CategoryInterfaceServer extends AuditInterface {
    name?: string;
    shortDescription?: string;
    description?: string;
    slug?: string;
    parentCategoryId?: string;
    parentCategory?: mongoose.Types.ObjectId;
    bannerURL?: string;
    thumbnailURL?: string;
    status?: StatusType;
}
export declare const PipeLineFlowData: string[];
export declare const SourceListData: string[];
export interface GroupRole {
    code: EmployeeType;
    role: string;
    allow: boolean;
}
export declare type agentLanguage = "English" | "Bahasa" | "French" | "Mandarin";
export declare const agentLanguageOption: string[];
export declare const PropertyTypeData: string[];
export declare const ProductCategoryData: string[];
export declare const SubscribedOptions: string[];
export interface MetaDataFileInterface {
    name: string;
    url: string;
    fileType: string;
}
export interface AuditInterface {
    _id?: string;
    _ids?: string;
    featured?: boolean;
    hideOnWebsite?: boolean;
    extraFilter?: any;
    keyword?: string;
    order?: number;
    createdAt: string;
    createdBy: string;
    createdByDetail?: AgentInterface;
    updateddAt?: string;
    updatedAt?: string;
    updatedBy?: string;
    updatedByDetail?: AgentInterface;
    archivedAt?: string;
    archivedBy?: string;
    archivedByDetail?: AgentInterface;
    ArchivedAt?: string;
    ArchivedBy?: string;
    ArchivedByDetail?: AgentInterface;
}
export interface AuditInterfaceServer {
    _id?: string;
    _ids?: string;
    featured?: boolean;
    hideOnWebsite?: boolean;
    extraFilter?: any;
    keyword?: string;
    order?: number;
    createdAt: string;
    createdBy: string;
    createdByDetail?: mongoose.Types.ObjectId;
    updateddAt?: string;
    updatedAt?: string;
    updatedBy?: string;
    updatedByDetail?: mongoose.Types.ObjectId;
    archivedAt?: string;
    archivedBy?: string;
    archivedByDetail?: AgentInterface;
    ArchivedAt?: string;
    ArchivedBy?: string;
    ArchivedByDetail?: mongoose.Types.ObjectId;
}
export interface AuditLogInterface extends AuditInterface {
    type: string;
    data: {
        field: string;
        value: string;
    }[];
    description?: string;
}
export interface SearchParamInterface<DATA> {
    id?: string;
    page?: number;
    limit?: number;
    orderBy?: string;
    include?: string;
    order?: "ASC" | "DESC";
    sort?: any;
    filter?: DATA | string;
    select?: string;
    total?: number;
}
export interface singgleResponse<DATA> {
    data?: DATA;
    haveError: boolean;
    errorCode?: string;
    errorMessage?: string;
    code?: string;
    message?: string;
}
export interface SingleResponse<D> {
    data?: D;
    haveError: boolean;
    errorCode?: string;
    errorMessage?: string;
    code?: string;
    message?: string;
}
export interface ListResponse<DATA> {
    total: number;
    page: number;
    limit: number;
    data: DATA[];
    haveError: boolean;
}
export interface AddressInterface {
    _id?: string;
    streetAddress: string;
    suburb: string;
    state: string;
    postcode: string;
    country: string;
    location: locationType;
}
export interface locationType {
    _id?: string;
    lat: number;
    long: number;
}
export interface LocationType {
    _id?: string;
    lat: number;
    long: number;
}
export interface ImageThumbnail {
    height: number;
    size: string;
    url: string;
    width: number;
}
export interface ImageInterface {
    id: number;
    lastModified: string;
    order: number;
    thumbnails: ImageThumbnail[];
    title: string;
    url: string;
}
export interface ProjectTypeInterface extends AuditInterface {
    name: string;
    bannerURL?: string;
    iconURL?: string;
    thumbnailURL?: string;
    slug?: string;
    shortDescription?: string;
    description?: string;
    promotionBanner?: {
        general: string;
        country: {
            [slug: string]: string;
        };
        state: {
            [slug: string]: string;
        };
        suburb: {
            [slug: string]: string;
        };
    };
    byTenants: {
        [tenantId: string]: {
            bannerURL?: string;
            thumbnailURL?: string;
            iconUrl?: string;
            promotionBanner?: {
                general: string;
                country: {
                    [slug: string]: string;
                };
                state: {
                    [slug: string]: string;
                };
                suburb: {
                    [slug: string]: string;
                };
            };
        };
    };
}
export interface AddressDetail extends AuditInterface {
    name: string;
    displayName: string;
    bannerURL?: string;
    thumbnailURL?: string;
    iconUrl?: string;
    slug?: string;
    shortDescription?: string;
    description?: string;
    tenantIds?: string[];
    tenants?: TenantInterface[];
}
export interface AddressDetailServer extends AuditInterface {
    name: string;
    displayName: string;
    bannerURL?: string;
    thumbnailURL?: string;
    iconUrl?: string;
    slug?: string;
    shortDescription?: string;
    description?: string;
    tenantIds?: string[];
    tenants?: mongoose.Types.ObjectId[];
}
export interface CountryInterface extends AddressDetail {
    byTenants: {
        [tenantId: string]: {
            bannerURL?: string;
            thumbnailURL?: string;
            iconUrl?: string;
        };
    };
}
export interface StateInterface extends CountryInterface {
    countryId: string;
    country: CountryInterface;
}
export interface StateInterfaceServer extends CountryInterface {
    countryId: string;
    country: mongoose.Types.ObjectId;
}
export interface RegionInterface extends StateInterface {
    stateId: string;
    state: StateInterface;
}
export interface RegionInterfaceServer extends StateInterface {
    stateId: string;
    state: mongoose.Types.ObjectId;
}
export interface SuburbInterface extends RegionInterface {
    regionId: string;
    region: RegionInterface;
}
export interface SuburbInterfaceServer extends RegionInterface {
    regionId: string;
    region: mongoose.Types.ObjectId;
}
export interface SuburbDataReport extends AuditInterface {
    headline: string;
    type: string;
    label: string;
    value: string;
    valueType: "percent" | "money";
    suburbId: string;
    suburb: SuburbInterface;
}
export interface SuburbDataReportServer extends AuditInterface {
    headline: string;
    type: string;
    label: string;
    value: string;
    valueType: "percent" | "money";
    suburbId: string;
    suburb: mongoose.Types.ObjectId;
}
export interface SuburbDemographic extends AuditInterface {
    label: string;
    icon: string;
    value: string;
    suburbId: string;
    suburb: SuburbInterface;
}
export interface SuburbDemographicServer extends AuditInterface {
    label: string;
    icon: string;
    value: string;
    suburbId: string;
    suburb: mongoose.Types.ObjectId;
}
export interface SuburbStatistic extends AuditInterface {
    category: string;
    label: string;
    value: number;
    suburbId: string;
    suburb: SuburbInterface;
}
export interface SuburbStatisticServer extends AuditInterface {
    category: string;
    label: string;
    value: number;
    suburbId: string;
    suburb: mongoose.Types.ObjectId;
}
export interface CurrencyDataInterface {
    _id?: string;
    code: string;
    value: number;
}
export interface AuthInterface {
    uid: string;
    token: string;
    sessionTime: string;
}
export { TenantInterface, GooglePlacesInterface, ProjectGooglePlacesInterface };
export interface PageInterface extends AuditInterface {
    tenantId: string;
    tenant: TenantInterface;
    slug: string;
    title: string;
    description: string;
    imageUrl: string;
}
export interface PageDetailInterface extends AuditInterface {
    pageId: string;
    page: PageInterface;
    templateId: string;
    template: TemplateDesignInterface;
    order: number;
    templateData: string[];
}
