import { AuditInterface, BlogInterface, Cordinat, CountryInterface, MetaDataFileInterface, ProjectTypeInterface, RegionInterface, StateInterface, SuburbInterface } from ".";
import { TenantInterface } from "./tenant.interface";
import { TALocation } from "./tripadvisor";
export declare type ProjectStatus = "DRAFT" | "AVAILABLE" | "NOTAVAILABLE" | "DELETED" | "LEASED" | "BOOKED" | "SOLD" | "HOLD" | "CONTRACT" | "PARTIAL";
export declare const ProjectStatusOptions: string[];
export declare type ProjectType = "Apartment" | "House & Land" | "Land" | "Office" | "Semi/Duplex" | "Block Of Units" | "Townhouse" | "Unit" | "Villa" | "Warehouse" | "Hotel/Leisure" | "Other" | "Motel" | "Resort" | "Retreat" | "Rural";
export declare type CurrencyId = "EUR" | "SGD" | "GBP" | "AUD" | "USD" | "IDR" | "THB";
export declare const CurrencyIdOptions: string[];
export declare type ProjectStatusType = "Off The Plan" | "Completed" | "Under Construction";
export declare const ProjectStatusTypeOptions: string[];
export interface AdditionalInformation {
    icon: string;
    headline: string;
    content: string;
}
export interface AdditionalOption {
    icon: string;
    headline: string;
    content: string;
    priceType: string;
    price: number;
}
export interface RentalRevenueEstimateInterface {
    headline: string;
    price: number;
    occupancy: number;
    rate: number;
    percentageCost: number;
    investmentTime: number;
}
export interface ProjectSummaryInterface {
    unitAvailable: number;
    sold: number;
    minPrice: number;
    bed: {
        min: number;
        max: number;
    };
    bath: {
        min: number;
        max: number;
    };
    garage: {
        min: number;
        max: number;
    };
    area: {
        min: number;
        max: number;
    };
}
export interface ProjectMainInformation extends AuditInterface {
    /**
     *
     */
    status: ProjectStatus | string[];
    headLine: string;
    shortDescription: string;
    content: string;
    featured: boolean;
    hideOnWebsite: boolean;
    address: string;
    addressCordinat: Cordinat | Cordinat[];
    suburbId: string;
    suburb: SuburbInterface | string;
    suburbName: string;
    stateId: string;
    state: StateInterface | string;
    stateName: string;
    countryId: string;
    country: CountryInterface | string;
    countryName: string;
    region: RegionInterface | string;
    regionId: string;
    regionName: string;
    postcode: string;
    additionalInformation?: AdditionalInformation[];
    taxIncluded?: boolean;
    tax?: number;
    tenantIds?: string[];
    tenants?: TenantInterface[];
    aggregatorIds?: string[];
    aggregators?: TenantInterface[];
    developerId?: string;
    developerDetail?: TenantInterface;
    developer?: TenantInterface;
    /**
     * @deprecated The method should not be used move to `projectTypeIds`
     */
    projectTypeId: string;
    /**
     * @deprecated The method should not be used move to `projectTypes`
     */
    projectType: ProjectTypeInterface;
    /**
     * @abstract New field moving from `projectTypeId`
     */
    projectTypeIds?: string[];
    /**
   * @abstract New field moving from `projectTypes`
   */
    projectTypes?: ProjectTypeInterface[];
    autdoorFeature: string[];
    indoorFeatures: string[];
}
export interface ProjectImageFileAndOtherInfo extends ProjectMainInformation {
    videoUrl: string[];
    onlineTourUrl: string[];
    images: string[];
    interior: string[];
    exterior: string[];
    floorPlans: string[] | MetaDataFileInterface[];
    brochure: string[] | MetaDataFileInterface[];
    collateral: string[] | MetaDataFileInterface[];
    specifications: string[] | MetaDataFileInterface[];
    areaGuide: string;
    presentation: string;
    news: string[];
    podcast: string[];
    webinar: string;
    threesixty: string;
}
export interface ProjectLotMainInformation extends ProjectImageFileAndOtherInfo {
    projectId: string;
    project: ProjectInterface;
    scheme: string;
    aspect: string;
    guarantee: string;
    level?: string;
    lot?: string;
    bed?: number;
    bath?: number;
    garage: number;
    internal: number;
    external: number;
    total: number;
    living: number;
    /**
     * @deprecated The method should not be used
     */
    type: string;
    price: number;
    /**
     * @abstract new field moving from developer
     */
    builder: string;
}
export interface ProjectInterface extends ProjectImageFileAndOtherInfo {
    /**
     * @deprecated The method should not be used
     */
    type: ProjectType;
    /**
     * @abstract Image URl
     */
    sellingPoint: string;
    url: string;
    landingUrl: string;
    currency: CurrencyId;
    preSaleType: "Percentage" | "Fix Price";
    preSalePercentage?: number;
    preSalePrice?: number;
    percentageDeposit: number;
    /**
     * @deprecated The method should not be used
     */
    aboutProject: string;
    /**
     * @deprecated The method should not be used
     */
    step1?: string;
    /**
     * @deprecated The method should not be used
     */
    step2?: string;
    /**
     * @deprecated The method should not be used
     */
    step3?: string;
    /**
     * @deprecated The method should not be used
     */
    step4?: string;
    /**
     * @deprecated The method should not be used
     */
    blogIds?: string[];
    /**
     * @deprecated The method should not be used
     */
    blogs?: BlogInterface[];
    projectStatus?: ProjectStatusType;
    totalUnit?: number;
    startDate?: string;
    completionDate?: string;
    /**
     * @deprecated The method should not be used move to `projectlot`
     */
    variationTitle: string;
    /**
     * @deprecated The method should not be used will be move to `projectvariance`
     */
    variationPricing: "ADD" | "REPLACE" | "MULTIPLE" | "DEVIDE";
    rentalRevenueEstimate?: RentalRevenueEstimateInterface[];
    /**
     * @abstract when `true` if sold ? no information on front end
     */
    hidePriceOnSold?: boolean;
    summary?: ProjectSummaryInterface;
    /**
     * @abstract New field for summary by `proejctid`
     */
    summaryByProjectTypeIds?: {
        [projectTypeId: string]: ProjectSummaryInterface;
    };
    /**
     * @abstract Interfce only not for data to model
     * */
    searchPrice?: number;
    searchPriceMin?: number;
    searchPriceMax?: number;
    /**
     * @abstract New field for summary by proejctid
     */
    projectImageFileAndOtherInfoByTenants: {
        [tenantId: string]: ProjectImageFileAndOtherInfo;
    };
}
export interface LotVariancesInterface {
    projectLotVarianceId: string;
    projectLotVariance: ProjectLotVarianceInterface;
    status: ProjectStatus;
    price: number;
    landPrice: number;
    housePrice: number;
    salesPackNumber: string;
    availabilityStock: number;
    additionalInformation?: AdditionalInformation[];
    additionalConst?: number;
    projectTypeId: string;
    projectType?: ProjectTypeInterface;
    variationPricing?: "ADD" | "REPLACE" | "MULTIPLE" | "DEVIDE";
}
export interface ProjectLotInterface extends ProjectLotMainInformation {
    /**
     *@abstract moving from `Projects`
     */
    variationTitle: string;
    /**
    * @deprecated The method should not be used move to `variances`
    */
    projectLotVarianceIds?: string[];
    /**
    * @deprecated The method should not be used move to `variances`
    */
    projectLotVariances?: ProjectLotVarianceInterface[];
    variances?: LotVariancesInterface[];
    city: string;
    estate: string;
    landPrice: number;
    housePrice: number;
    salesPackNumber: string;
    landRegistration: string;
    stockType: "NORMAL" | "PARTIAL" | "FRACTIONAL";
    /**
     * Default availability stock is 1
     * when sold on variance availability stock  0-1 (100%)
     */
    availabilityStock: number;
    projectImageFileAndOtherInfoByTenants: {
        [tenantId: string]: ProjectImageFileAndOtherInfo;
    };
}
export interface ProjectLotVarianceInterface extends ProjectLotMainInformation {
    variationPricing: "ADD" | "REPLACE" | "MULTIPLE" | "DEVIDE";
    projectImageFileAndOtherInfoByTenants: {
        [tenantId: string]: ProjectImageFileAndOtherInfo;
    };
    additionalOptions: AdditionalOption[];
    projectTypeId: string;
    projectType: ProjectTypeInterface;
}
export interface ProjectRequestInterface extends AuditInterface {
    projectId: string;
    project?: ProjectInterface;
    agencyId: string;
    agency?: TenantInterface;
    developerId: string;
    developer?: TenantInterface;
    aggregatorId: string;
    aggregator?: TenantInterface;
}
/**
 * @deprecated The method should not be used
 */
export interface ProjectTripadvisorInterface extends AuditInterface {
    projectId: string;
    project: ProjectInterface;
    tripadvisorId: string;
    tripadvisor: TALocation;
    distance?: string;
    bearing?: string;
}
