import type {
  HelpCategory,
  CreateHelpCategoryPayload,
  UpdateHelpCategoryPayload
} from "@/domain/entities/help-category";

export interface HelpCategoryFindAllOptions {
  all?: boolean;
  page?: number;
  per_page?: number;
  search?: string;
  sort_by?: string;
  sort_dir?: "asc" | "desc";
  order_by?: string;
  order?: "ASC" | "DESC";
}

export interface HelpCategoriesPaginatorMeta {
  current_page: number;
  last_page: number;
  per_page: number;
  total: number;
  from?: number | null;
  to?: number | null;
}

export interface HelpCategoriesResponse {
  data: HelpCategory[];
  meta?: HelpCategoriesPaginatorMeta;
  links?: Record<string, string | null>;
}

export interface HelpCategoryRepository {
  findAll(options?: HelpCategoryFindAllOptions): Promise<HelpCategoriesResponse>;
  findById(id: string | number): Promise<HelpCategory>;
  create(payload: CreateHelpCategoryPayload): Promise<HelpCategory>;
  update(id: string | number, payload: UpdateHelpCategoryPayload): Promise<HelpCategory>;
  delete(id: string | number): Promise<void>;
  toggleVisibility(id: string | number): Promise<HelpCategory>;
}
