import { Locator, Page } from '@playwright/test';
/**
 * Tasks tab helpers — Playwright bindings for the `AgentTasksTab`
 * component from `@iblai/web-containers`.
 *
 * All UI strings below mirror `AGENT_TASKS_TAB_LABELS` from
 * `@iblai/web-containers/next`. If a consumer renames a label via the
 * `labels` prop, override these constants per spec — don't edit this file.
 *
 * The helpers assume the Edit Mentor dialog is already open. Call
 * `switchToTasksTab(page)` first; from then on, every helper accepts
 * either the `Page` or the dialog `Locator`.
 */
export declare const TASKS_LABELS: {
    readonly tabName: "Tasks";
    readonly headerTitle: "Tasks";
    readonly headerDescription: "Configure automated tasks for your mentor.";
    readonly toolbar: {
        readonly searchPlaceholder: "Search all tasks...";
        readonly selectDate: "Select date";
        readonly scheduleTask: "Schedule Task";
    };
    readonly metrics: {
        readonly total: "Total Tasks";
        readonly completed: "Completed";
        readonly failed: "Failed";
    };
    /** Status badges displayed on each task row. */
    readonly status: {
        readonly completed: "Completed";
        readonly failed: "Failed";
        readonly running: "Running";
        readonly scheduled: "Scheduled";
        readonly disabled: "Disabled";
    };
    readonly list: {
        readonly selectHint: "Select a task to view its run logs.";
        readonly repeatOnce: "Once";
        readonly deleteTask: "Delete task";
    };
    readonly logs: {
        readonly title: "Task Logs";
        readonly selectPrompt: "Select a task on the left to view its run logs.";
        readonly noLogs: "No run logs for this task yet.";
        readonly loading: "Loading logs...";
        readonly forTask: "Logs for";
    };
    readonly states: {
        readonly loading: "Loading tasks...";
        readonly empty: "No tasks scheduled.";
    };
    readonly scheduleDialog: {
        readonly taskName: "Task Name";
        readonly taskNamePlaceholder: "Enter task name";
        readonly taskPrompt: "Task Prompt";
        readonly taskPromptPlaceholder: "Enter task prompt";
        readonly time: "Time";
        readonly repeat: "Repeat";
        readonly notifyByEmail: "Notify me by email";
        readonly schedule: "Schedule Task";
        readonly scheduling: "Scheduling...";
        readonly cancel: "Cancel";
        readonly dontRepeat: "Don't repeat";
        readonly daily: "Daily";
        readonly weekly: "Weekly";
        readonly monthly: "Monthly";
        readonly startTimeInPast: "Start time must be in the future.";
    };
    readonly deleteDialog: {
        readonly title: "Delete Task";
        readonly delete: "Delete Task";
        readonly deleting: "Deleting...";
        readonly cancel: "Cancel";
    };
    readonly logDetails: {
        readonly title: "Log Details";
        readonly status: "Status";
        readonly createdAt: "Created";
        readonly startTime: "Started";
        readonly endTime: "Ended";
        readonly output: "Output";
    };
};
/** The four repeat cadences accepted by `scheduleTask`. */
export type TaskRepeat = "don't-repeat" | 'daily' | 'weekly' | 'monthly';
/** Possible status badges on a task row. */
export type TaskStatus = keyof typeof TASKS_LABELS.status;
/**
 * Check whether the Tasks tab is currently rendered in the Edit Mentor
 * dialog. Returns false instead of throwing so callers can guard
 * conditionally rendered tabs (e.g. permission-gated).
 */
export declare function isTasksTabVisible(page: Page): Promise<boolean>;
/**
 * Switch to the Tasks tab. Assumes the Edit Mentor dialog is open. After
 * the click we wait for the unique "Schedule Task" button before
 * returning, so callers can rely on the panel being interactive.
 */
export declare function switchToTasksTab(page: Page): Promise<void>;
/** Locator for the "Schedule Task" toolbar button (opens the dialog). */
export declare function getScheduleTaskButton(scope: Page | Locator): Locator;
/** Locator for the task list's search input. */
export declare function getSearchInput(scope: Page | Locator): Locator;
/**
 * Locator for a task row by its title. We scope to the click-target
 * `role="button"` rendered by `TaskList` so callers can `.click()` to
 * select, or chain `.getByRole('button', { name: 'Delete task' })` to
 * delete.
 */
export declare function getTaskRow(scope: Page | Locator, taskName: string): Locator;
export declare function expectTotalTasks(scope: Page | Locator, n: number): Promise<void>;
export declare function expectCompletedTasks(scope: Page | Locator, n: number): Promise<void>;
export declare function expectFailedTasks(scope: Page | Locator, n: number): Promise<void>;
export declare function expectTasksEmpty(scope: Page | Locator): Promise<void>;
export declare function expectTaskInList(scope: Page | Locator, taskName: string): Promise<void>;
export declare function expectTaskNotInList(scope: Page | Locator, taskName: string): Promise<void>;
/**
 * Click a task row to select it. Marks the row's `aria-pressed=true` and
 * the logs panel rebinds to that task.
 */
export declare function selectTaskInList(scope: Page | Locator, taskName: string): Promise<void>;
/**
 * Assert that a given task's status badge matches the expected status.
 */
export declare function expectTaskStatus(scope: Page | Locator, taskName: string, status: TaskStatus): Promise<void>;
/** Type into the search input. Returns once the input value matches. */
export declare function searchTasks(scope: Page | Locator, query: string): Promise<void>;
/** Open the Schedule Task dialog and wait for it to be interactive. */
export declare function openScheduleTaskDialog(scope: Page | Locator): Promise<void>;
/**
 * End-to-end: open the dialog, fill the form, click Schedule, and wait
 * for it to close.
 *
 * `time` is an HTML `<input type="time">` string ("HH:mm", 24-hour). If
 * the chosen date is today and the chosen time is in the past, the
 * dialog will block submission — choose accordingly.
 */
export declare function scheduleTask(scope: Page | Locator, opts: {
    name: string;
    prompt?: string;
    time: string;
    repeat?: TaskRepeat;
    notifyByEmail?: boolean;
}): Promise<void>;
/** Asserts the in-dialog past-time error is currently shown. */
export declare function expectScheduleStartTimeInPastError(scope: Page | Locator): Promise<void>;
/**
 * Click the trash icon on a task row and confirm the delete in the
 * follow-up dialog.
 */
export declare function deleteTask(scope: Page | Locator, taskName: string): Promise<void>;
/**
 * Wait for the logs panel to finish loading and assert that the selected
 * task name is shown in the header.
 */
export declare function expectLogsForTask(scope: Page | Locator, taskName: string): Promise<void>;
export declare function expectNoLogsForSelectedTask(scope: Page | Locator): Promise<void>;
/**
 * Click the first log entry under the selected task to open the log
 * details modal. Returns once the dialog title is visible.
 */
export declare function openFirstLogDetails(scope: Page | Locator): Promise<void>;
export declare function expectLogDetailsStatus(scope: Page | Locator, status: 'success' | 'error' | 'running' | string): Promise<void>;
