import type { ApiClient } from './request';
import type { AnalyticsReportResponse } from './analytics';
export type ApplySeoChangesRequest = {
    siteId: string;
    target: {
        type: "page";
        pageId: string;
    };
    changes: {
        title?: string;
        metaTitle?: string;
        metaDescription?: string | null;
    };
};
export type ApplySeoChangesResponse = {
    ok: true;
    pageId: string;
    routeId: string | null;
    draftTitle: string | null;
    draftMetaTitle: string | null;
    draftMetaDescription: string | null;
};
export type SeoRangePreset = "1d" | "7d" | "30d" | "90d" | "365d";
export type SeoOverviewQuery = {
    siteId: string;
    preset?: SeoRangePreset;
    start?: string;
    end?: string;
};
export type SeoOverviewTimePoint = {
    date: string;
    clicks: number;
    impressions: number;
    ctr: number;
    position: number;
};
export type SeoOverviewResponse = {
    ok: true;
    overview: {
        range: {
            from: string;
            to: string;
            preset?: SeoRangePreset;
        };
        totals: {
            clicks: number;
            impressions: number;
            ctr: number;
            position: number;
        };
        timeseries: SeoOverviewTimePoint[];
        lastSyncedDate: string | null;
        persistEnabled: boolean;
        hasData: boolean;
    };
    preset: SeoRangePreset;
};
export type PerformanceRangePreset = "1d" | "7d" | "30d" | "90d" | "365d";
export type PerformanceOverviewQuery = {
    siteId: string;
    preset?: PerformanceRangePreset;
    start?: string;
    end?: string;
};
export type PerformanceOverviewResponse = {
    ok: true;
    overview: {
        range: {
            from: string;
            to: string;
            preset?: PerformanceRangePreset;
        };
        gscConnected: boolean;
        gscDataThrough: string | null;
        gscPersistEnabled: boolean;
        gscLastSyncedDate: string | null;
        seo: {
            totals: SeoOverviewResponse["overview"]["totals"];
            timeseries: SeoOverviewTimePoint[];
            hasData: boolean;
        };
        analytics: {
            range: AnalyticsReportResponse["range"];
            totals: AnalyticsReportResponse["totals"];
            series: AnalyticsReportResponse["series"];
            topPages: AnalyticsReportResponse["topPages"];
            topReferrers: AnalyticsReportResponse["topReferrers"];
            goLiveAt: AnalyticsReportResponse["goLiveAt"];
            clamped: boolean;
            partial: boolean;
            noDataYet: boolean;
        };
    };
    preset: PerformanceRangePreset;
};
export type SeoSearchSummary = {
    clicks: number;
    impressions: number;
    ctr: number;
    position: number;
};
export type SeoSearchPagesQuery = {
    siteId: string;
    preset?: PerformanceRangePreset;
    start?: string;
    end?: string;
    pageNumber?: number;
    perPage?: number;
    sort?: "clicks" | "impressions" | "ctr" | "position" | "queryCount" | "page";
    direction?: "asc" | "desc";
    search?: string;
    page?: string;
    device?: "DESKTOP" | "MOBILE" | "TABLET";
    country?: string;
    format?: "csv";
};
export type SeoSearchPagesResponse = {
    ok: true;
    range: {
        from: string;
        to: string;
        preset?: PerformanceRangePreset;
    };
    preset: PerformanceRangePreset;
    page: number;
    perPage: number;
    total: number;
    totalPages: number;
    sort: {
        by: NonNullable<SeoSearchPagesQuery["sort"]>;
        direction: NonNullable<SeoSearchPagesQuery["direction"]>;
    };
    search: string | null;
    filters: {
        page: string | null;
        device: SeoSearchPagesQuery["device"] | null;
        country: string | null;
    };
    summary: SeoSearchSummary;
    items: Array<{
        page: string;
        clicks: number;
        impressions: number;
        ctr: number;
        position: number;
        queryCount: number;
    }>;
};
export type SeoSearchQueriesQuery = {
    siteId: string;
    preset?: PerformanceRangePreset;
    start?: string;
    end?: string;
    pageNumber?: number;
    perPage?: number;
    sort?: "clicks" | "impressions" | "ctr" | "position" | "pageCount" | "query";
    direction?: "asc" | "desc";
    search?: string;
    page?: string;
    query?: string;
    device?: "DESKTOP" | "MOBILE" | "TABLET";
    country?: string;
    format?: "csv";
};
export type SeoSearchQueriesResponse = {
    ok: true;
    range: {
        from: string;
        to: string;
        preset?: PerformanceRangePreset;
    };
    preset: PerformanceRangePreset;
    page: number;
    perPage: number;
    total: number;
    totalPages: number;
    sort: {
        by: NonNullable<SeoSearchQueriesQuery["sort"]>;
        direction: NonNullable<SeoSearchQueriesQuery["direction"]>;
    };
    search: string | null;
    filters: {
        page: string | null;
        query: string | null;
        device: SeoSearchQueriesQuery["device"] | null;
        country: string | null;
    };
    summary: SeoSearchSummary;
    items: Array<{
        query: string;
        clicks: number;
        impressions: number;
        ctr: number;
        position: number;
        pageCount: number;
    }>;
};
export declare function applySeoChanges(client: ApiClient, body: ApplySeoChangesRequest): Promise<ApplySeoChangesResponse>;
export declare function getSeoOverview(apiClient: ApiClient, query: SeoOverviewQuery, options?: RequestInit): Promise<SeoOverviewResponse>;
export declare function getSeoPages(apiClient: ApiClient, query: SeoSearchPagesQuery, options?: RequestInit): Promise<SeoSearchPagesResponse>;
export declare function getSeoQueries(apiClient: ApiClient, query: SeoSearchQueriesQuery, options?: RequestInit): Promise<SeoSearchQueriesResponse>;
