import type { ResourceDeletionPolicies } from "../../../aws/CloudFormation";
import type { NonEmptyString } from "../../../common/CustomTypes/NonEmptyString";
import type { NaturalNumber } from "../../../common/CustomTypes/Numerics";
import type { Dict } from "../../../common/Types";
import type { ObjectValidations } from '@altostra/type-validations';
import type { MultiVendorProperty, ResourceBase, StorageEncryption, VPC } from "../Common";
export interface RelationalDBResourceBase extends ResourceBase {
    dbEngine: MultiVendorProperty<DBEngine>;
    masterUsername: NonEmptyString;
    deletionProtection: boolean;
    backupRetentionDays?: NaturalNumber;
    databaseName?: NonEmptyString;
    storageEncryption?: StorageEncryption;
    preferedBackupWindow?: TimeWindow;
    preferedMaintainanceWindow?: WeeklyTimeWindow;
    vpc?: VPC;
    deletionPolicy?: ResourceDeletionPolicies;
}
export interface RelationalDBNonServerlessResourceBase extends RelationalDBResourceBase {
    port?: NaturalNumber;
    publicAccessibility: boolean;
}
export interface DBEngine {
    engine: RelationalDBEngine;
    engineVersion: string;
    instanceClass: string;
}
export declare type RelationalDBEngine = 'mysql' | 'postgresql';
export interface Time {
    hours: NaturalNumber | 0;
    minutes?: NaturalNumber | 0;
}
export interface WeeklyTime extends Time {
    day: DayOfWeek;
}
export interface TimeWindow {
    start: Time;
    end: Time;
}
export interface WeeklyTimeWindow {
    start: WeeklyTime;
    end: WeeklyTime;
}
export declare type DayOfWeek = 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';
export declare const isDBEngine: import("@altostra/type-validations").ObjectOfTypeValidation<DBEngine>;
export declare const isTime: import("@altostra/type-validations").ObjectOfTypeValidation<Time>;
export declare const isTimeWindow: import("@altostra/type-validations").ObjectOfTypeValidation<TimeWindow>;
export declare const isWeeklyTime: import("@altostra/type-validations").ObjectOfTypeValidation<WeeklyTime>;
export declare const isWeeklyTimeWindow: import("@altostra/type-validations").ObjectOfTypeValidation<WeeklyTimeWindow>;
declare type ValidatedRelationalDBResourceBase = Omit<RelationalDBResourceBase, 'type'>;
export declare const relationalDBResourceBaseValidations: ObjectValidations<ValidatedRelationalDBResourceBase>;
declare type RelationalDBNonServerlessResourceBaseValidations = ObjectValidations<Omit<RelationalDBNonServerlessResourceBase, 'type'>>;
export declare const relationalDBNonServerlessResourceBaseValidations: RelationalDBNonServerlessResourceBaseValidations;
export interface EngineVersionSpec {
    validInstances: string[];
    family: string;
    isDeprecated?: boolean;
}
export declare function getValidVersions(versions: Dict<EngineVersionSpec>): string[];
export {};
