import '../../models/member.dart'; import '../member_repository.dart'; class MockMemberService implements MemberRepository { static final _members = [_member7, _member42, _member85]; int _indexOf(int id) { final i = _members.indexWhere((m) => m.id == id); return i == -1 ? 0 : i; } @override Future first() async => _members.first; @override Future last() async => _members.last; @override Future show(int id) async => _members.firstWhere((m) => m.id == id, orElse: () => _members.first); @override Future prev(int id) async { final i = _indexOf(id); return _members[i == 0 ? _members.length - 1 : i - 1]; } @override Future next(int id) async { final i = _indexOf(id); return _members[(i + 1) % _members.length]; } @override Future> search(String term) async { final t = term.toLowerCase(); final results = {}; for (final m in _members) { for (final p in m.people) { if (p.fullName.toLowerCase().contains(t) || m.formattedId.contains(t)) { final key = '${m.formattedId}${p.family.toString().padLeft(2, '0')}'; results[key] = '(${m.formattedId}-${p.family.toString().padLeft(2, '0')}) ${p.lastName}, ${p.firstName}'; } } } return results; } } // ── Datos mock ──────────────────────────────────────────────────────────────── final _member7 = Member( id: 7, regDate: '1993-01-01', address: 'CALLE SALVADOR ESCUDERO, Nº3-2ºA', city: 'CARTAGENA', zip: '30205', email: 'RICARDO.LEGAZ@GMAIL.COM', phone: '648101900', bank: '0182', bankOffice: '6855', bankSecCode: '87', bankAccount: '0201674767', bankName: 'CAIXABANK', mandate: 'MNDT-00007', type: 'FAMILIAR', fee: 33.80, comment: '', comment2: '', paid: false, remSpecial: false, retenido: false, unregDate: null, unregReason: '', people: [ Person( memberId: 7, family: 1, firstName: 'ANTONIO', lastName: 'PUENTE CARBALLES', dni: '', birthDate: '1953-01-02', phone: '633313501', email: 'apcarballes@gmail.com', lopd: true, newsletter: true, bHealth: true, authorized: true, authorized2: false, ), Person( memberId: 7, family: 2, firstName: 'POLONIA', lastName: 'COLMENAR SÁNCHEZ', dni: '', birthDate: '1952-08-09', phone: '670243473', email: '', lopd: true, newsletter: true, authorized: true, authorized2: false, ), Person( memberId: 7, family: 3, firstName: 'RICARDO', lastName: 'LEGAZ RÍOS', dni: '23032266C', birthDate: '1961-04-21', phone: '648101900', email: 'RICARDO.LEGAZ@GMAIL.COM', lopd: true, newsletter: true, authorized: true, authorized2: true, ), Person( memberId: 7, family: 4, firstName: 'CRISTINA', lastName: 'PUENTE COLMENAR', dni: '23019853TX', birthDate: '1978-10-15', phone: '690728311', email: 'CPUENTE.SPANIA@GMAIL.COM', lopd: true, newsletter: true, authorized: true, authorized2: true, ), Person( memberId: 7, family: 5, firstName: 'MATILDA', lastName: 'LEGAZ PUENTE', dni: '', birthDate: '2013-04-28', phone: '', email: '', lopd: false, newsletter: false, authorized: false, authorized2: false, ), ], comments: [ MemberComment( id: 1, comment: '11.03.23 chema: viene a darse de baja pero va a intentar traspasar el abono a su hija. 12.03.23. Cristina: Su hija está interesada, en el caso de traspaso, toma nota. 13.03.25: LOS TITULARES 3 Y 4 HARÁN USO ACTIVO DE CLUB.', createdAt: '2023-03-11', ), ], ); final _member42 = Member( id: 42, regDate: '2018-03-15', address: 'Calle Mayor 12', city: 'Madrid', zip: '28001', email: 'socio@example.com', phone: '612345678', bank: '0049', bankOffice: '1500', bankSecCode: '42', bankAccount: '0123456789', bankName: 'Santander', mandate: 'MNDT-00042', type: 'INDIVIDUAL', fee: 25.50, comment: 'Nota antigua importada del sistema anterior.', comment2: 'Revisado en auditoría 2024.', paid: false, remSpecial: false, retenido: false, unregDate: null, unregReason: '', people: [ Person( memberId: 42, family: 1, firstName: 'María', lastName: 'García López', dni: '12345678A', birthDate: '1985-03-15', phone: '612345678', email: 'maria@example.com', lopd: true, newsletter: true, authorized: true, authorized2: false, ), Person( memberId: 42, family: 2, firstName: 'Carlos', lastName: 'García López', dni: '87654321B', birthDate: '1988-07-22', phone: '699887766', email: 'carlos@example.com', lopd: true, newsletter: false, authorized: true, authorized2: true, ), ], comments: [ MemberComment( id: 10, comment: 'Solicitó cambio de domiciliación bancaria el 05/01/2024.', createdAt: '2024-01-05', ), MemberComment( id: 11, comment: 'Renovó cuota anual sin incidencias.', createdAt: '2024-09-01', ), ], ); final _member85 = Member( id: 85, regDate: '2010-06-20', address: 'Av. de la Constitución 45, 3B', city: 'Murcia', zip: '30008', email: 'jlopez@correo.es', phone: '968112233', bank: '2100', bankOffice: '0001', bankSecCode: '12', bankAccount: '9876543210', bankName: 'CaixaBank', mandate: 'MNDT-00085', type: 'JUVENIL', fee: 18.00, comment: '', comment2: '', paid: false, remSpecial: true, retenido: true, unregDate: null, unregReason: '', people: [ Person( memberId: 85, family: 1, firstName: 'Jorge', lastName: 'López Martínez', dni: '22334455C', birthDate: '2005-11-30', phone: '968112233', email: 'jlopez@correo.es', lopd: true, newsletter: true, authorized: true, authorized2: false, ), ], comments: [], );