import { aws_s3 as s3, aws_iam as iam } from 'aws-cdk-lib';
import * as constructs from 'constructs';
import * as gluedatabase from '../glue/database/gluedatabase';
/**
 * Permissions that can be used as part of a LakeFormation Permissions
 * refer https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GrantPermissions.html
 */
export declare enum Permissions {
    ALL = "ALL",
    SELECT = "SELECT",
    ALTER = "ALTER",
    DROP = "DROP",
    DELETE = "DELETE",
    INSERT = "INSERT",
    DESCRIBE = "DESCRIBE",
    CREATE_DATABASE = "CREATE_DATABASE",
    CREATE_TABLE = "CREATE_TABLE",
    DATA_LOCATION_ACCESS = "DATA_LOCATION_ACESS",
    CREATE_TAG = "CREATE_TAG",
    ASSOCIATE = "ASSOCIATE",
    CREATE_TABLE_READ_WRITE = "CREATE_TABLE_READ_WRITE"
}
export interface AddNewBucketToLakeFormationProps {
    /**
     * Name of Bucket
     */
    readonly name: string;
    /**
     * and optional role to use to join the Lake. This will default the the standard Service rule, if not
     * specified, which is the recommended approach.
     */
    readonly role?: iam.Role;
    /**
     * Lifecycle Rules for objects that are stored in the Bucket. This will default to lifeccyle pattern that will
     * eventually move unused obejects to glacier.
     */
    readonly lifecycleRules?: s3.LifecycleRule[] | undefined;
}
/**
 * Glue Database that holds ingest Tables.
 */
export interface AddDatabaseProps {
    /**
     * Name for database
     */
    readonly databaseName: string;
}
export interface LakeFormationProps {
    /**
     * Opt out of Mechanisms for high data protection, that are appropriate for production
     * @default false
     */
    readonly nonproduction?: boolean | undefined;
    /**
     * The cdk exec role will be creating Datalake Objects so will require permission
     * @default true
     */
    readonly makeCdkExecRoleLakeAdmin?: boolean | undefined;
}
/**
 * Create a Class for the methods
 * the methods that we use to operate on our 'Datalake'
 */
export declare class LakeFormation extends constructs.Construct {
    /**
     * Used to determine if buckets are backedup, and protected from Stack Destruction.
     */
    nonproduction: boolean | undefined;
    constructor(scope: constructs.Construct, id: string, props: LakeFormationProps);
    /**
     * Create a new bucket and associate it to the the Lakeformation.
     * @param props AddNewBucketToLakeFormationProps
     * @returns s3.Bucket
     */
    addNewBucketToLakeFormation(props: AddNewBucketToLakeFormationProps): s3.Bucket;
    /**
     * @param props AddDatabaseProps
     * @returns gluedatabase.GlueDataBase
     */
    addDatabase(props: AddDatabaseProps): gluedatabase.GlueDataBase;
}
