import { ConfigService } from '@nestjs/config';
import { Repository } from 'typeorm';
import { Group } from '../../database/entities/group.entity';
import { GroupMember } from '../../database/entities/group-member.entity';
import { GroupInvite } from '../../database/entities/group-invite.entity';
import { User } from '../../database/entities/user.entity';
import { ExpenseSplit } from '../../database/entities/expense-split.entity';
import { Settlement } from '../../database/entities/settlement.entity';
import { ActivityService } from '../activity/activity.service';
import { NotificationsService } from '../notifications/notifications.service';
import { MailService } from '../mail/mail.service';
import { CreateGroupDto } from './dto/create-group.dto';
import { UpdateGroupDto } from './dto/update-group.dto';
import { InviteMemberDto } from './dto/invite-member.dto';
import { GroupDto, GroupDetailDto, MemberDto, BalanceEntryDto } from './dto/group-response.dto';
import { InviteResultDto, PendingInviteDto, InvitePreviewDto } from './dto/invite-response.dto';
export declare class GroupsService {
    private readonly groupRepo;
    private readonly groupMemberRepo;
    private readonly groupInviteRepo;
    private readonly userRepo;
    private readonly expenseSplitRepo;
    private readonly settlementRepo;
    private readonly activityService;
    private readonly notificationsService;
    private readonly mailService;
    private readonly config;
    private readonly logger;
    constructor(groupRepo: Repository<Group>, groupMemberRepo: Repository<GroupMember>, groupInviteRepo: Repository<GroupInvite>, userRepo: Repository<User>, expenseSplitRepo: Repository<ExpenseSplit>, settlementRepo: Repository<Settlement>, activityService: ActivityService, notificationsService: NotificationsService, mailService: MailService, config: ConfigService);
    listMyGroups(userId: string): Promise<GroupDto[]>;
    createGroup(userId: string, dto: CreateGroupDto): Promise<GroupDetailDto>;
    getGroup(groupId: string): Promise<GroupDetailDto>;
    updateGroup(groupId: string, dto: UpdateGroupDto): Promise<GroupDetailDto>;
    deleteGroup(groupId: string): Promise<{
        message: string;
    }>;
    listMembers(groupId: string): Promise<MemberDto[]>;
    inviteMember(groupId: string, dto: InviteMemberDto, invitedById: string): Promise<InviteResultDto>;
    listPendingInvites(groupId: string): Promise<PendingInviteDto[]>;
    cancelInvite(groupId: string, inviteId: string): Promise<{
        message: string;
    }>;
    getInvitePreview(token: string): Promise<InvitePreviewDto>;
    acceptInvite(token: string, userId: string): Promise<{
        message: string;
        groupId: string;
    }>;
    acceptPendingInvitesForEmail(email: string, userId: string): Promise<number>;
    private addUserToGroup;
    private toPendingInviteDto;
    private dispatchInviteEmail;
    removeMember(groupId: string, targetUserId: string, requesterId: string): Promise<{
        message: string;
    }>;
    leaveGroup(groupId: string, userId: string): Promise<{
        message: string;
    }>;
    getBalances(groupId: string): Promise<BalanceEntryDto[]>;
    private countActiveMembers;
    private sumSplitAmount;
    private sumSettlements;
    private toGroupDto;
    private toGroupDetailDto;
    private toMemberDto;
}
