import { StreamableFile } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { Response } from 'express';
import { AdminPrincipal, UserPrincipal } from '../common/auth/principal';
import { AdsService } from './ads.service';
import { EmailTemplatesService } from './email-templates.service';
import { FeatureFlagsService } from './feature-flags.service';
import { HomepageService } from './homepage.service';
import { LegalPagesService } from './legal-pages.service';
import { PlatformSettingsService } from './platform-settings.service';
declare class SaveSettingsDto {
    values: Record<string, unknown>;
    confirmDangerous?: boolean;
    publish?: boolean;
}
declare class ResetDto {
    confirm: boolean;
}
declare class FlagUpdateDto {
    enabled?: boolean;
    platforms?: string[];
    targeting?: Record<string, unknown>;
    rolloutPercent?: number;
    description?: string;
    confirmDangerous?: boolean;
}
export declare class PlatformConfigController {
    private readonly settings;
    private readonly flags;
    private readonly templates;
    private readonly homepage;
    private readonly legal;
    private readonly ads;
    constructor(settings: PlatformSettingsService, flags: FeatureFlagsService, templates: EmailTemplatesService, homepage: HomepageService, legal: LegalPagesService, ads: AdsService);
    brandingAsset(asset: string, res: Response): Promise<StreamableFile>;
    uploadBranding(principal: AdminPrincipal, asset: string, file?: {
        mimetype: string;
        buffer: Buffer;
        size: number;
        originalname?: string;
    }): Promise<{
        data: {
            key: string;
            url: string;
            mimeType: string;
            sizeBytes: number;
        };
        message: string;
    }>;
    removeBranding(principal: AdminPrincipal, asset: string): Promise<{
        data: {
            key: string;
            url: string;
        };
        message: string;
    }>;
    publicConfig(ifNoneMatch: string | undefined, ifConfigVersion: string | undefined, res: Response): Promise<{
        data: {
            version: number;
            updatedAt: string;
            config: Record<string, unknown> | {
                features: {
                    [x: string]: unknown;
                };
                ads: {
                    placements: {
                        key: string;
                        adType: string;
                        androidUnitId: string | null;
                        iosUnitId: string | null;
                        frequency: number;
                        cooldownSeconds: number;
                        maxImpressions: number | null;
                        excludePremium: boolean;
                    }[];
                };
                version: number;
            };
        };
        message: string;
    } | undefined>;
    publishedHomepage(): Promise<{
        data: ({
            sections: {
                type: string;
                id: string;
                createdAt: Date;
                updatedAt: Date;
                enabled: boolean;
                title: string | null;
                subtitle: string | null;
                content: Prisma.JsonValue | null;
                sortOrder: number;
                revisionId: string;
            }[];
        } & {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string | null;
            note: string | null;
        }) | null;
        message: string;
    }>;
    legalPage(slug: string): Promise<{
        data: {
            document: {
                versions: {
                    status: string;
                    version: number;
                    id: string;
                    createdAt: Date;
                    publishedAt: Date | null;
                    createdByAdminId: string | null;
                    title: string;
                    contentHtml: string;
                    contentText: string | null;
                    seoTitle: string | null;
                    seoDescription: string | null;
                    effectiveAt: Date | null;
                    documentId: string;
                }[];
            } & {
                id: string;
                createdAt: Date;
                updatedAt: Date;
                key: string;
                slug: string;
                title: string;
            };
            version: {
                status: string;
                version: number;
                id: string;
                createdAt: Date;
                publishedAt: Date | null;
                createdByAdminId: string | null;
                title: string;
                contentHtml: string;
                contentText: string | null;
                seoTitle: string | null;
                seoDescription: string | null;
                effectiveAt: Date | null;
                documentId: string;
            };
        };
        message: string;
    }>;
    acceptLegal(principal: UserPrincipal, key: string): Promise<{
        data: {
            id: string;
            ipAddress: string | null;
            userId: string;
            userAgent: string | null;
            documentId: string;
            versionId: string;
            acceptedAt: Date;
        };
        message: string;
    }>;
    health(): Promise<{
        data: {
            score: number;
            checks: {
                key: string;
                label: string;
                status: "ok" | "warn" | "error";
                detail: string;
            }[];
            incomplete: number;
        };
        message: string;
    }>;
    allSettings(): Promise<{
        data: {
            groups: {
                group: import("./settings-defaults").SettingGroup;
                items: {
                    id: string;
                    key: string;
                    value: Prisma.JsonValue;
                    type: string;
                    group: string;
                    description: string | null;
                    isPublic: boolean;
                    isSensitive: boolean;
                    hasValue: boolean;
                    defaultValue: Prisma.JsonValue;
                    updatedAt: Date;
                }[];
            }[];
        };
        message: string;
    }>;
    groups(): {
        data: {
            key: import("./settings-defaults").SettingGroup;
            label: string;
        }[];
        message: string;
    };
    history(group?: string, limit?: string): Promise<{
        data: {
            items: {
                version: number;
                id: string;
                createdAt: Date;
                group: string;
                createdByAdminId: string | null;
                note: string | null;
                snapshot: Prisma.JsonValue;
            }[];
        };
        message: string;
    }>;
    group(group: string): Promise<{
        data: {
            group: import("./settings-defaults").SettingGroup;
            items: {
                id: string;
                key: string;
                value: Prisma.JsonValue;
                type: string;
                group: string;
                description: string | null;
                isPublic: boolean;
                isSensitive: boolean;
                hasValue: boolean;
                defaultValue: Prisma.JsonValue;
                updatedAt: Date;
            }[];
        };
        message: string;
    }>;
    save(principal: AdminPrincipal, group: string, dto: SaveSettingsDto): Promise<{
        data: {
            group: import("./settings-defaults").SettingGroup;
            items: {
                id: string;
                key: string;
                value: Prisma.JsonValue;
                type: string;
                group: string;
                description: string | null;
                isPublic: boolean;
                isSensitive: boolean;
                hasValue: boolean;
                defaultValue: Prisma.JsonValue;
                updatedAt: Date;
            }[];
        };
        message: string;
    }>;
    publish(principal: AdminPrincipal, group: string): Promise<{
        data: {
            group: import("./settings-defaults").SettingGroup;
            version: number;
        };
        message: string;
    }>;
    reset(principal: AdminPrincipal, group: string, dto: ResetDto): Promise<{
        data: {
            group: import("./settings-defaults").SettingGroup;
            items: {
                id: string;
                key: string;
                value: Prisma.JsonValue;
                type: string;
                group: string;
                description: string | null;
                isPublic: boolean;
                isSensitive: boolean;
                hasValue: boolean;
                defaultValue: Prisma.JsonValue;
                updatedAt: Date;
            }[];
        };
        message: string;
    }>;
    rollback(principal: AdminPrincipal, id: string): Promise<{
        data: {
            group: import("./settings-defaults").SettingGroup;
            items: {
                id: string;
                key: string;
                value: Prisma.JsonValue;
                type: string;
                group: string;
                description: string | null;
                isPublic: boolean;
                isSensitive: boolean;
                hasValue: boolean;
                defaultValue: Prisma.JsonValue;
                updatedAt: Date;
            }[];
        };
        message: string;
    }>;
    featureFlags(): Promise<{
        data: {
            items: {
                id: string;
                createdAt: Date;
                name: string;
                updatedAt: Date;
                description: string | null;
                key: string;
                dependsOn: Prisma.JsonValue | null;
                updatedByAdminId: string | null;
                enabled: boolean;
                platforms: Prisma.JsonValue | null;
                targeting: Prisma.JsonValue | null;
                rolloutPercent: number;
            }[];
        };
        message: string;
    }>;
    updateFlag(principal: AdminPrincipal, key: string, dto: FlagUpdateDto): Promise<{
        data: {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            description: string | null;
            key: string;
            dependsOn: Prisma.JsonValue | null;
            updatedByAdminId: string | null;
            enabled: boolean;
            platforms: Prisma.JsonValue | null;
            targeting: Prisma.JsonValue | null;
            rolloutPercent: number;
        };
        message: string;
    }>;
    listEmailTemplates(): Promise<{
        data: {
            items: ({
                versions: {
                    status: string;
                    version: number;
                    id: string;
                    createdAt: Date;
                    subject: string;
                    templateId: string;
                    preheader: string | null;
                    htmlBody: string;
                    textBody: string;
                    variables: Prisma.JsonValue | null;
                    publishedAt: Date | null;
                    createdByAdminId: string | null;
                }[];
            } & {
                id: string;
                createdAt: Date;
                name: string;
                updatedAt: Date;
                description: string | null;
                key: string;
            })[];
        };
        message: string;
    }>;
    emailTemplate(key: string): Promise<{
        data: {
            versions: {
                status: string;
                version: number;
                id: string;
                createdAt: Date;
                subject: string;
                templateId: string;
                preheader: string | null;
                htmlBody: string;
                textBody: string;
                variables: Prisma.JsonValue | null;
                publishedAt: Date | null;
                createdByAdminId: string | null;
            }[];
        } & {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            description: string | null;
            key: string;
        };
        message: string;
    }>;
    emailDraft(principal: AdminPrincipal, key: string, body: {
        subject: string;
        preheader?: string;
        htmlBody: string;
        textBody: string;
        variables?: string[];
    }): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            subject: string;
            templateId: string;
            preheader: string | null;
            htmlBody: string;
            textBody: string;
            variables: Prisma.JsonValue | null;
            publishedAt: Date | null;
            createdByAdminId: string | null;
        };
        message: string;
    }>;
    emailPublish(principal: AdminPrincipal, key: string, body: {
        version: number;
    }): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            subject: string;
            templateId: string;
            preheader: string | null;
            htmlBody: string;
            textBody: string;
            variables: Prisma.JsonValue | null;
            publishedAt: Date | null;
            createdByAdminId: string | null;
        };
        message: string;
    }>;
    emailTest(principal: AdminPrincipal, key: string, body: {
        to: string;
    }): Promise<{
        data: {
            sent: boolean;
        };
        message: string;
    }>;
    smtpTest(principal: AdminPrincipal, body: {
        to: string;
    }): Promise<{
        data: {
            sent: boolean;
        };
        message: string;
    }>;
    homepageRevisions(): Promise<{
        data: {
            items: ({
                sections: {
                    type: string;
                    id: string;
                    createdAt: Date;
                    updatedAt: Date;
                    enabled: boolean;
                    title: string | null;
                    subtitle: string | null;
                    content: Prisma.JsonValue | null;
                    sortOrder: number;
                    revisionId: string;
                }[];
            } & {
                status: string;
                version: number;
                id: string;
                createdAt: Date;
                updatedAt: Date;
                publishedAt: Date | null;
                createdByAdminId: string | null;
                title: string | null;
                note: string | null;
            })[];
        };
        message: string;
    }>;
    homepageDraft(principal: AdminPrincipal, body: {
        fromId?: string;
    }): Promise<{
        data: {
            sections: {
                type: string;
                id: string;
                createdAt: Date;
                updatedAt: Date;
                enabled: boolean;
                title: string | null;
                subtitle: string | null;
                content: Prisma.JsonValue | null;
                sortOrder: number;
                revisionId: string;
            }[];
        } & {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string | null;
            note: string | null;
        };
        message: string;
    }>;
    homepageSections(principal: AdminPrincipal, id: string, body: {
        sections: Array<{
            id?: string;
            type: string;
            title?: string;
            subtitle?: string;
            content?: Record<string, unknown>;
            sortOrder: number;
            enabled?: boolean;
        }>;
    }): Promise<{
        data: {
            sections: {
                type: string;
                id: string;
                createdAt: Date;
                updatedAt: Date;
                enabled: boolean;
                title: string | null;
                subtitle: string | null;
                content: Prisma.JsonValue | null;
                sortOrder: number;
                revisionId: string;
            }[];
        } & {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string | null;
            note: string | null;
        };
        message: string;
    }>;
    homepagePublish(principal: AdminPrincipal, id: string): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string | null;
            note: string | null;
        };
        message: string;
    }>;
    homepageRollback(principal: AdminPrincipal, body: {
        version: number;
    }): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string | null;
            note: string | null;
        };
        message: string;
    }>;
    legalDocs(): Promise<{
        data: {
            items: ({
                versions: {
                    status: string;
                    version: number;
                    id: string;
                    createdAt: Date;
                    publishedAt: Date | null;
                    createdByAdminId: string | null;
                    title: string;
                    contentHtml: string;
                    contentText: string | null;
                    seoTitle: string | null;
                    seoDescription: string | null;
                    effectiveAt: Date | null;
                    documentId: string;
                }[];
            } & {
                id: string;
                createdAt: Date;
                updatedAt: Date;
                key: string;
                slug: string;
                title: string;
            })[];
        };
        message: string;
    }>;
    legalDoc(key: string): Promise<{
        data: {
            versions: {
                status: string;
                version: number;
                id: string;
                createdAt: Date;
                publishedAt: Date | null;
                createdByAdminId: string | null;
                title: string;
                contentHtml: string;
                contentText: string | null;
                seoTitle: string | null;
                seoDescription: string | null;
                effectiveAt: Date | null;
                documentId: string;
            }[];
        } & {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            key: string;
            slug: string;
            title: string;
        };
        message: string;
    }>;
    legalDraft(principal: AdminPrincipal, key: string, body: {
        title: string;
        contentHtml: string;
        contentText?: string;
        seoTitle?: string;
        seoDescription?: string;
    }): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string;
            contentHtml: string;
            contentText: string | null;
            seoTitle: string | null;
            seoDescription: string | null;
            effectiveAt: Date | null;
            documentId: string;
        };
        message: string;
    }>;
    legalPublish(principal: AdminPrincipal, key: string, body: {
        version: number;
        confirmDangerous?: boolean;
    }): Promise<{
        data: {
            status: string;
            version: number;
            id: string;
            createdAt: Date;
            publishedAt: Date | null;
            createdByAdminId: string | null;
            title: string;
            contentHtml: string;
            contentText: string | null;
            seoTitle: string | null;
            seoDescription: string | null;
            effectiveAt: Date | null;
            documentId: string;
        };
        message: string;
    }>;
    adPlacements(): Promise<{
        data: {
            items: {
                id: string;
                createdAt: Date;
                name: string;
                updatedAt: Date;
                description: string | null;
                key: string;
                updatedByAdminId: string | null;
                enabled: boolean;
                adType: string;
                androidUnitId: string | null;
                iosUnitId: string | null;
                frequency: number;
                cooldownSeconds: number;
                maxImpressions: number | null;
                excludePremium: boolean;
            }[];
        };
        message: string;
    }>;
    updatePlacement(principal: AdminPrincipal, key: string, body: {
        enabled?: boolean;
        adType?: string;
        androidUnitId?: string | null;
        iosUnitId?: string | null;
        frequency?: number;
        cooldownSeconds?: number;
        maxImpressions?: number | null;
        excludePremium?: boolean;
        confirmDangerous?: boolean;
    }): Promise<{
        data: {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            description: string | null;
            key: string;
            updatedByAdminId: string | null;
            enabled: boolean;
            adType: string;
            androidUnitId: string | null;
            iosUnitId: string | null;
            frequency: number;
            cooldownSeconds: number;
            maxImpressions: number | null;
            excludePremium: boolean;
        };
        message: string;
    }>;
}
export {};
