import 'package:flutter_test/flutter_test.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/widget/a11y/a11y_labels.dart';

void main() {
  setUpAll(() async {
    // appointmentLabel formatiert über formatHm() (Jiffy) – Locale einmal laden.
    await Jiffy.setLocale('de');
  });

  group('A11yLabels.appointmentLabel', () {
    test('setzt Fach, Ort und Zeitspanne zusammen', () {
      final label = A11yLabels.appointmentLabel(
        subject: 'Mathe',
        location: 'Raum 101',
        start: DateTime(2026, 5, 8, 8, 0),
        end: DateTime(2026, 5, 8, 8, 45),
        crossedOut: false,
      );
      expect(label, 'Mathe, Raum 101, 08:00–08:45');
    });

    test('hängt bei Ausfall den Ausfall-Hinweis an', () {
      final label = A11yLabels.appointmentLabel(
        subject: 'Deutsch',
        location: 'Raum 5',
        start: DateTime(2026, 5, 8, 9, 0),
        end: DateTime(2026, 5, 8, 9, 45),
        crossedOut: true,
      );
      expect(label, endsWith(A11yLabels.cancelled));
      expect(label, 'Deutsch, Raum 5, 09:00–09:45, Ausfall');
    });

    test('glättet Zeilenumbrüche im Ort zu Trennern', () {
      final label = A11yLabels.appointmentLabel(
        subject: 'Sport',
        location: 'Halle\nHr. Müller',
        start: DateTime(2026, 5, 8, 10, 0),
        end: DateTime(2026, 5, 8, 10, 45),
        crossedOut: false,
      );
      expect(label, 'Sport, Halle, Hr. Müller, 10:00–10:45');
    });

    test('lässt einen leeren Ort weg', () {
      final label = A11yLabels.appointmentLabel(
        subject: 'Pause',
        location: '',
        start: DateTime(2026, 5, 8, 11, 0),
        end: DateTime(2026, 5, 8, 11, 15),
        crossedOut: false,
      );
      expect(label, 'Pause, 11:00–11:15');
    });
  });

  group('A11yLabels.moreAppointments', () {
    test('pluralisiert die Overflow-Beschriftung', () {
      expect(A11yLabels.moreAppointments(3), '+3 weitere Termine');
    });
  });
}
