import type { TweetContent, TweetStatus } from './types';
export declare function insertTweet(tweet: TweetContent): Promise<number>;
export declare function updateTweetStatus(id: number, status: TweetStatus, extra?: {
    error?: string;
    media_task_id?: string;
    media_url?: string;
    twitter_media_id?: string;
}): Promise<void>;
export declare function updateTweetPosted(id: number, tweetId: string): Promise<void>;
export declare function getTweetCountLast24Hours(): Promise<number>;
export declare function hasSlotExecuted(slotName: string, windowMins?: number): Promise<boolean>;
export declare function insertWorkerRun(slotName: string, tweetsPosted: number, status?: string): Promise<void>;
export declare function insertEngagement(action: {
    actionType: string;
    targetTweetId?: string;
    targetUser?: string;
    searchQuery?: string;
    replyText?: string;
    ourTweetId?: number;
    status?: string;
}): Promise<number>;
export declare function hasEngagedWith(tweetId: string, actionType?: string): Promise<boolean>;
export declare function insertFreeQuestion(data: {
    twitterUserId: string;
    twitterUsername?: string;
    questionTweetId?: string;
    questionText?: string;
    answerTweetId?: string;
    answerText?: string;
}): Promise<number>;
export declare function getFreeQuestionCount(twitterUserId: string): Promise<number>;
/** @deprecated Use getFreeQuestionCount() >= 2 instead */
export declare function hasUsedFreeQuestion(twitterUserId: string): Promise<boolean>;
export declare function getUserCooldown(twitterUserId: string): Promise<Date | null>;
export declare function updateUserCooldown(twitterUserId: string): Promise<void>;
export declare function isUserOnCooldown(lastRepliedAt: Date | null, cooldownHours?: number): boolean;
export declare function isDuplicateContent(text: string, hours?: number): Promise<boolean>;
export declare function hasRecentEventAlert(gameKey: string, hours?: number): Promise<boolean>;
/** Returns the existing pick direction for a game, if any was posted/pending in the last N hours */
export declare function getExistingPickForGame(gameKey: string, hours?: number): Promise<{
    pick_direction: string;
    content_type: string;
} | null>;
/** Returns ALL existing picks for the given game keys (batch lookup for hot takes) */
export declare function getExistingPicksForGames(gameKeys: string[], hours?: number): Promise<Map<string, string>>;
export interface UngradedPick {
    id: number;
    game_key: string;
    league: string;
    pick_type: string;
    selection: string;
    pick_direction: string;
    line_value: number | null;
    game_date: string | null;
    inputs_snapshot: any;
}
export declare function getUngradedPicks(limit?: number): Promise<UngradedPick[]>;
export declare function updatePickGrade(pickId: number, gradeResult: string, homeScore: number | null, awayScore: number | null, total: number | null, notes: string | null): Promise<void>;
export interface TallySummary {
    recent: {
        wins: number;
        losses: number;
        pushes: number;
        byLeague: Array<{
            league: string;
            wins: number;
            losses: number;
            pushes: number;
        }>;
    };
    overall: {
        wins: number;
        losses: number;
        pushes: number;
        winPct: number;
        total: number;
        byLeague: Array<{
            league: string;
            wins: number;
            losses: number;
            pushes: number;
        }>;
    };
}
export declare function getPickTallySummary(recentHours?: number): Promise<TallySummary>;
export declare function getPicksForCompletedGame(gameKey: string): Promise<{
    id: number;
    selection: string;
    pick_direction: string;
    grade_result: string;
} | null>;
export declare function getUntweetedBlogPosts(limit?: number): Promise<Array<{
    id: number;
    slug: string;
    title: string;
    excerpt: string;
    league: string;
    content_type: string;
}>>;
//# sourceMappingURL=twitter-data-queries.d.ts.map