import 'package:superport_v2/core/common/models/paginated_result.dart';

import '../entities/approval_template.dart';

/// 결재 템플릿 도메인 저장소 인터페이스.
abstract class ApprovalTemplateRepository {
  /// 템플릿 목록을 조회한다.
  Future<PaginatedResult<ApprovalTemplate>> list({
    int page = 1,
    int pageSize = 20,
    String? query,
    bool? isActive,
  });

  /// 템플릿 상세를 조회한다.
  Future<ApprovalTemplate> fetchDetail(int id, {bool includeSteps = true});

  /// 템플릿을 생성한다. 단계 입력은 옵션이다.
  Future<ApprovalTemplate> create(
    ApprovalTemplateInput input, {
    List<ApprovalTemplateStepInput> steps = const [],
  });

  /// 템플릿 기본 정보와 단계 구성을 수정한다.
  Future<ApprovalTemplate> update(
    int id,
    ApprovalTemplateInput input, {
    List<ApprovalTemplateStepInput>? steps,
  });

  /// 템플릿을 삭제한다.
  Future<void> delete(int id);

  /// 삭제된 템플릿을 복구한다.
  Future<ApprovalTemplate> restore(int id);
}
