#[derive(Debug, Clone, Copy)]
pub(crate) struct StepSql {
    pub get: &'static str,
    pub list: &'static str,
    pub count: &'static str,
    pub delete: &'static str,
    pub acquire: &'static str,
    pub clear_retry: &'static str,
    pub complete: &'static str,
    pub fail: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct QueueSql {
    pub insert: &'static str,
    pub get: &'static str,
    pub get_by_name: &'static str,
    pub list: &'static str,
    pub delete: &'static str,
    pub delete_by_name: &'static str,
    pub exists: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct RunSql {
    pub insert: &'static str,
    pub get: &'static str,
    pub list: &'static str,
    pub count: &'static str,
    pub delete: &'static str,
    pub start: &'static str,
    pub get_status: &'static str,
    pub complete: &'static str,
    pub pause: &'static str,
    pub fail: &'static str,
    pub get_by_message_id: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct MessageSql {
    pub list_by_consumer_worker: &'static str,
    pub count_by_consumer_worker: &'static str,
    pub count_worker_references: &'static str,
    pub move_to_dlq: &'static str,
    pub release_by_consumer_worker: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct WorkerSql {
    pub mark_stopped: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct WorkflowSql {
    pub get_by_name: &'static str,
    pub insert: &'static str,
    pub get: &'static str,
    pub list: &'static str,
    pub count: &'static str,
    pub delete: &'static str,
}

#[derive(Debug, Clone, Copy)]
pub(crate) struct DbStateSql {
    pub check_table_exists: &'static str,
    pub check_orphaned_messages: &'static str,
    pub check_orphaned_message_workers: &'static str,
    pub purge_queue_messages: &'static str,
    pub purge_queue_workers: &'static str,
    pub queue_metrics: &'static str,
    pub all_queues_metrics: &'static str,
    pub system_stats: &'static str,
    pub worker_health_global: &'static str,
    pub worker_health_by_queue: &'static str,
    pub purge_old_workers: &'static str,
}

pub(crate) trait SqlDialect {
    const STEP: StepSql;
    const QUEUE: QueueSql;
    const RUN: RunSql;
    const MESSAGE: MessageSql;
    const WORKER: WorkerSql;
    const WORKFLOW: WorkflowSql;
    const DB_STATE: DbStateSql;
}
