import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

import '../i18n/strings.g.dart';
import '../services/export_import_service.dart';
import 'backup_section.dart';
import 'theme.dart';

/// Basic settings: app language, backup (export/import) and an "about"
/// section. [exportImport] is injectable so widget tests can pass a fake;
/// the app resolves it lazily from the service locator.
class SettingsScreen extends StatelessWidget {
  const SettingsScreen({this.exportImport, super.key});

  final ExportImportService? exportImport;

  @override
  Widget build(BuildContext context) {
    final t = context.t;
    final current = TranslationProvider.of(context).flutterLocale.languageCode;
    return Scaffold(
      appBar: AppBar(title: Text(t.menu.settings)),
      body: ListView(
        children: [
          _SectionHeader(t.settings.language),
          _LanguageTile(
            label: t.settings.langEs,
            selected: current == 'es',
            onTap: () => LocaleSettings.setLocale(AppLocale.es),
          ),
          _LanguageTile(
            label: t.settings.langEn,
            selected: current == 'en',
            onTap: () => LocaleSettings.setLocale(AppLocale.en),
          ),
          _LanguageTile(
            label: t.settings.langPt,
            selected: current == 'pt',
            onTap: () => LocaleSettings.setLocale(AppLocale.pt),
          ),
          ListTile(
            leading: const Icon(Icons.smartphone_outlined),
            title: Text(t.settings.systemLanguage),
            onTap: () => LocaleSettings.useDeviceLocale(),
          ),
          const Divider(),
          _SectionHeader(t.backup.title),
          BackupSection(service: exportImport),
          const Divider(),
          _SectionHeader(t.settings.about),
          ListTile(
            leading: Image.asset('assets/logo.png', width: 32),
            title: Text(t.settings.aboutOpen),
            subtitle: Text(t.settings.aboutText),
            trailing: const Icon(Icons.chevron_right),
            onTap: () => context.push('/about'),
          ),
        ],
      ),
    );
  }
}

class _SectionHeader extends StatelessWidget {
  const _SectionHeader(this.text);

  final String text;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(16, 16, 16, 4),
      child: Text(
        text,
        style: Theme.of(context).textTheme.titleSmall?.copyWith(
          color: seedGreen,
          fontWeight: FontWeight.w600,
          letterSpacing: 0.4,
        ),
      ),
    );
  }
}

class _LanguageTile extends StatelessWidget {
  const _LanguageTile({
    required this.label,
    required this.selected,
    required this.onTap,
  });

  final String label;
  final bool selected;
  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(label),
      trailing: selected ? const Icon(Icons.check, color: seedGreen) : null,
      onTap: onTap,
    );
  }
}
