/// Representa um convite pendente no sistema class Invite { final String id; final String email; final String role; final String? phone; // para encarregados — número do terminal final String invitedBy; // profile_id do principal que convidou final String status; // pending | accepted | rejected | expired final DateTime createdAt; final DateTime expiresAt; final String? childId; // para encarregados — ligação à criança Invite({ required this.id, required this.email, required this.role, this.phone, required this.invitedBy, required this.status, required this.createdAt, required this.expiresAt, this.childId, }); factory Invite.fromMap(Map m) => Invite( id: m['id'] ?? '', email: m['email'] ?? '', role: m['role'] ?? 'parent', phone: m['phone'], invitedBy: m['invited_by'] ?? '', status: m['status'] ?? 'pending', createdAt: DateTime.tryParse(m['created_at'] ?? '') ?? DateTime.now(), expiresAt: DateTime.tryParse(m['expires_at'] ?? '') ?? DateTime.now().add(const Duration(days: 7)), childId: m['child_id'], ); bool get isExpired => DateTime.now().isAfter(expiresAt); bool get isPending => status == 'pending' && !isExpired; Map toMap() => { 'email': email, 'role': role, 'phone': phone, 'invited_by': invitedBy, 'status': status, 'expires_at': expiresAt.toIso8601String(), 'child_id': childId, }; }