import { type SQL } from 'drizzle-orm';
import type { Repository } from './repository';
import type { CrudDeleteOptions, CrudModifyType, CrudTrashQueryOptions, CrudWriteOptions } from '../../typings/comm/crud';
import type { PageQuery, PageResult } from '../../typings/comm/page';
/**
 * 业务 Service 基类
 *
 * 第一个 `@InjectRepository` 会自动绑定主实体，之后可用下方通用 CRUD。
 * 可重写 `modifyBefore` / `modifyAfter` 在增删改前后处理数据。
 * add / update / delete 均支持数组（内部判断，一次批量落库）。
 */
export declare abstract class BaseService {
    protected entity?: Repository<any>;
    /** IoC 注入时绑定主实体（仅首次） */
    bindEntity(repo: Repository<any>): void;
    /** 显式绑定主实体（CRUD 无 Service 时用） */
    setEntity(repo: Repository<any>): void;
    /** 是否已绑定主实体 */
    hasEntity(): boolean;
    /** 取已绑定 Repository */
    getRepo(): Repository<any>;
    private requireEntity;
    /**
     * 增删改之前（子类按需重写）
     * - add / update：data 为写入对象或数组
     * - delete：data 为 where 条件
     */
    modifyBefore(_data: any, _type: CrudModifyType): Promise<void>;
    /**
     * 增删改之后（子类按需重写）
     * - add / update：data 多为落库后的行（或原写入对象）
     * - delete：data 为 where 条件
     */
    modifyAfter(_data: any, _type: CrudModifyType): Promise<void>;
    /** 新增；数组走 create/save 批量；受 vome.crud.upsert 控制 */
    add(data: unknown, options?: CrudWriteOptions): Promise<{
        [x: string]: any;
    }>;
    /**
     * 更新：
     * - update(where, patch) SQL 条件
     * - update({ id, ... }) 单条
     * - update([{ id, ... }, ...]) 批量（同 patch 合并 inArray）
     */
    update(whereOrData: SQL | Record<string, unknown> | Record<string, unknown>[], data?: unknown): Promise<any>;
    /**
     * 删除：开启软删则进回收站，否则硬删；force 强制硬删。
     * whereOrIds 原样交给 Repository（SQL / id / id[]）。
     * 声明式 CRUD：仅当 Controller `api` 含 `restore` 时才会软删；未声明则路由层默认 force 硬删。
     * 业务校验统一重写本方法；彻底删除传 { force: true }。
     */
    delete(whereOrIds: SQL | number | string | Array<number | string>, options?: CrudDeleteOptions): Promise<void>;
    /** 从回收站恢复；SQL / id / id[] */
    restore(whereOrIds: SQL | number | string | Array<number | string>): Promise<void>;
    /** 列表（默认不含回收站；onlyTrashed / withTrashed 可调） */
    list(where?: SQL | undefined, options?: CrudTrashQueryOptions & {
        orderBy?: SQL[];
    }): Promise<{
        [x: string]: any;
    }[]>;
    /** 详情：传 id 或 where */
    info(idOrWhere: number | string | SQL, options?: CrudTrashQueryOptions): Promise<{
        [x: string]: any;
    } | undefined>;
    /** 分页 */
    page(query?: PageQuery & {
        where?: SQL | undefined;
        orderBy?: SQL[];
    } & CrudTrashQueryOptions): Promise<PageResult>;
}
