import type { PlatformRecord } from './platform';
import type { BlogTag } from './blog';
import type { VideoTeaser, TranscriptWord, SpeakerMapping } from './video-processing';
export interface ChangelogEntry {
    title: string;
    description?: string;
    /**
     * Per-entry visibility flag. Optional so product releases (which always render
     * publicly) remain backwards compatible. Investor updates require this field
     * because each entry can be marked internal — see investor-update-utils.ts.
     */
    visibility?: 'public' | 'internal';
}
export interface ReleaseMedia {
    id: number;
    release_id: number;
    media_type: 'image' | 'video' | 'screenshot' | 'demo';
    media_url: string;
    display_order: number | null;
    title: string | null;
    description: string | null;
    created_at: string;
    updated_at: string;
    created_by: string;
}
export interface ProductReleaseGitHubLink {
    id: number;
    release_id: number;
    github_release_url: string;
    display_order: number | null;
    created_at: string;
}
export interface KnowledgeBaseLink {
    id: number;
    release_id: number;
    kb_article_path: string;
    display_order: number | null;
    created_at: string;
}
export interface ClickUpRoadmapTask {
    id: number;
    release_id: number;
    clickup_task_id: string;
    display_order: number | null;
    created_at: string;
}
export interface ClickUpDeliveryTask {
    id: number;
    release_id: number;
    clickup_task_id: string;
    display_order: number | null;
    created_at: string;
}
export interface ProductRelease {
    id: number;
    title: string;
    slug: string;
    version: string;
    summary: string | null;
    content: string | null;
    release_type: 'major' | 'minor' | 'patch' | 'beta' | 'alpha';
    release_status: 'alpha' | 'beta' | 'stable' | 'deprecated';
    release_date: string;
    features_added: ChangelogEntry[];
    bugs_fixed: ChangelogEntry[];
    improvements: ChangelogEntry[];
    breaking_changes: ChangelogEntry[];
    github_releases?: ProductReleaseGitHubLink[];
    knowledge_base_links?: KnowledgeBaseLink[];
    clickup_roadmap_tasks?: ClickUpRoadmapTask[];
    clickup_delivery_tasks?: ClickUpDeliveryTask[];
    release_media?: ReleaseMedia[];
    featured_image: string | null;
    migration_guide_url: string | null;
    documentation_url: string | null;
    youtube_url: string | null;
    main_video_url: string | null;
    transcript: string | null;
    transcript_words_data?: TranscriptWord[];
    srt_content?: string | null;
    video_summary: string | null;
    video_bites: VideoTeaser[];
    highlight_video_url: string | null;
    highlight_video_thumbnail: string | null;
    highlight_video_duration_ms: number | null;
    highlight_video_source: 'manual' | 'ai_generated' | null;
    main_video_thumbnail: string | null;
    ai_transcript_formatted?: string;
    speaker_mapping?: SpeakerMapping;
    ai_confidence_transcript: number | null;
    ai_confidence_video_summary: number | null;
    ai_confidence_summary: number | null;
    seo_title: string | null;
    seo_description: string | null;
    seo_keywords: string | null;
    og_image_url: string | null;
    status: 'draft' | 'published' | 'archived';
    published_at: string | null;
    author_id: string | null;
    /**
     * Hydrated by `getRelease` (detail) and `getReleases` (list) via
     * `hydrateAuthor` in the hub DAL. Optional so admin form + every existing
     * consumer that doesn't read author stay backward-compatible.
     */
    author?: {
        id: string;
        full_name: string;
        avatar_url: string | null;
        job_title: string | null;
        email?: string | null;
    };
    created_at: string;
    updated_at: string;
    custom_instructions: string | null;
    view_count: number;
    download_count: number;
    platforms?: PlatformRecord[];
    tags?: BlogTag[];
    product_release_platforms?: Array<{
        platform_id: string;
        is_featured: boolean;
        featured_order: number | null;
    }>;
    product_release_tags?: Array<{
        tag_id: number;
    }>;
    blog_tags?: BlogTag[];
}
export interface CreateProductReleaseData {
    title: string;
    slug: string;
    version: string;
    summary?: string;
    content?: string;
    release_type: 'major' | 'minor' | 'patch' | 'beta' | 'alpha';
    release_status: 'alpha' | 'beta' | 'stable' | 'deprecated';
    release_date: string;
    features_added?: ChangelogEntry[];
    bugs_fixed?: ChangelogEntry[];
    improvements?: ChangelogEntry[];
    breaking_changes?: ChangelogEntry[];
    github_releases?: Array<{
        github_release_url: string;
        display_order?: number;
    }>;
    knowledge_base_links?: Array<{
        kb_article_path: string;
        display_order?: number;
    }>;
    clickup_roadmap_tasks?: Array<{
        clickup_task_id: string;
        display_order?: number;
    }>;
    clickup_delivery_tasks?: Array<{
        clickup_task_id: string;
        display_order?: number;
    }>;
    release_media?: Array<{
        media_type: 'image' | 'video' | 'screenshot' | 'demo';
        media_url: string;
        title?: string;
        description?: string;
        display_order?: number;
    }>;
    featured_image?: string;
    migration_guide_url?: string;
    documentation_url?: string;
    youtube_url?: string;
    main_video_url?: string;
    transcript?: string;
    srt_content?: string | null;
    video_summary?: string;
    video_bites?: VideoTeaser[];
    highlight_video_url?: string | null;
    highlight_video_thumbnail?: string | null;
    highlight_video_duration_ms?: number | null;
    highlight_video_source?: 'manual' | 'ai_generated' | null;
    main_video_thumbnail?: string | null;
    seo_title?: string;
    seo_description?: string;
    seo_keywords?: string;
    og_image_url?: string;
    status: 'draft' | 'published' | 'archived';
    published_at?: string | null;
    author_id: string;
    platforms: string[];
    featured_platform?: string;
    tags: number[];
    custom_instructions?: string | null;
}
export type UpdateProductReleaseData = Partial<CreateProductReleaseData>;
export interface ProductReleaseFilters {
    platform?: string | 'all';
    tags?: string[];
    version?: string;
    release_type?: ('major' | 'minor' | 'patch' | 'beta' | 'alpha')[];
    release_status?: ('alpha' | 'beta' | 'stable' | 'deprecated')[];
    has_breaking_changes?: boolean;
    search?: string;
    featured?: boolean;
    status?: string;
    limit?: number;
    offset?: number;
    ids?: (number | string)[];
}
export interface ProductReleaseListResponse {
    data: ProductRelease[];
    count: number;
}
export interface GitHubRelease {
    id: string;
    tag_name: string;
    name: string;
    body: string;
    published_at: string;
    html_url: string;
    prerelease: boolean;
    draft: boolean;
}
export declare const releaseTypeOptions: readonly [{
    readonly value: "major";
    readonly label: "Major Release";
    readonly description: "Breaking changes, new architecture";
    readonly color: "red";
}, {
    readonly value: "minor";
    readonly label: "Minor Release";
    readonly description: "New features, backward compatible";
    readonly color: "blue";
}, {
    readonly value: "patch";
    readonly label: "Patch Release";
    readonly description: "Bug fixes only";
    readonly color: "green";
}, {
    readonly value: "beta";
    readonly label: "Beta Release";
    readonly description: "Pre-release testing version";
    readonly color: "yellow";
}, {
    readonly value: "alpha";
    readonly label: "Alpha Release";
    readonly description: "Early testing version";
    readonly color: "orange";
}];
export declare const releaseStatusOptions: readonly [{
    readonly value: "alpha";
    readonly label: "Alpha";
    readonly description: "Early development, unstable";
    readonly color: "orange";
}, {
    readonly value: "beta";
    readonly label: "Beta";
    readonly description: "Feature complete, testing";
    readonly color: "yellow";
}, {
    readonly value: "stable";
    readonly label: "Stable";
    readonly description: "Production ready";
    readonly color: "green";
}, {
    readonly value: "deprecated";
    readonly label: "Deprecated";
    readonly description: "No longer supported";
    readonly color: "gray";
}];
export declare const changelogLabels: {
    readonly features_added: "Features Added";
    readonly bugs_fixed: "Bugs Fixed";
    readonly improvements: "Improvements";
    readonly breaking_changes: "Breaking Changes";
};
export declare const SEMVER_REGEX: RegExp;
//# sourceMappingURL=product-release.d.ts.map