import { DataSource, Repository } from 'typeorm';
import { Expense } from '../../database/entities/expense.entity';
import { ExpenseSplit } from '../../database/entities/expense-split.entity';
import { Group } from '../../database/entities/group.entity';
import { GroupMember } from '../../database/entities/group-member.entity';
import { SplitCalculatorService } from './split-calculator.service';
import { ActivityService } from '../activity/activity.service';
import { NotificationsService } from '../notifications/notifications.service';
import { CreateExpenseDto } from './dto/create-expense.dto';
import { UpdateExpenseDto } from './dto/update-expense.dto';
import { ExpenseQueryDto } from './dto/expense-query.dto';
import { ExpenseDto, PaginatedExpensesDto } from './dto/expense-response.dto';
export declare class ExpensesService {
    private readonly expenseRepo;
    private readonly expenseSplitRepo;
    private readonly groupRepo;
    private readonly groupMemberRepo;
    private readonly dataSource;
    private readonly splitCalculator;
    private readonly activityService;
    private readonly notificationsService;
    constructor(expenseRepo: Repository<Expense>, expenseSplitRepo: Repository<ExpenseSplit>, groupRepo: Repository<Group>, groupMemberRepo: Repository<GroupMember>, dataSource: DataSource, splitCalculator: SplitCalculatorService, activityService: ActivityService, notificationsService: NotificationsService);
    createExpense(groupId: string, createdById: string, dto: CreateExpenseDto): Promise<ExpenseDto>;
    listGroupExpenses(groupId: string, query: ExpenseQueryDto): Promise<PaginatedExpensesDto>;
    listMyExpenses(userId: string, query: ExpenseQueryDto): Promise<PaginatedExpensesDto>;
    getExpense(expenseId: string, userId: string): Promise<ExpenseDto>;
    updateExpense(expenseId: string, userId: string, dto: UpdateExpenseDto): Promise<ExpenseDto>;
    deleteExpense(expenseId: string, userId: string): Promise<{
        message: string;
    }>;
    private validateMembership;
    private validateSplitMemberships;
    private assertCanView;
    private assertCanModify;
    private buildExpenseWhere;
    private findExpenseOrThrow;
    private loadExpenseWithRelations;
    private toDto;
    private toPaginated;
}
