import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import '../../domain/entities/devise.dart';

const _kDevisePrefereeKey = 'unionflow.devise.preferee';

/// Widget de sélection de la devise préférée (persistée en secure storage).
///
/// Utilisé sur la page Profil/Paramètres. Notifie via [onChanged] avec la
/// nouvelle devise quand l'utilisateur fait un choix.
class DeviseSelector extends StatefulWidget {
  final Devise? initial;
  final ValueChanged<Devise>? onChanged;

  const DeviseSelector({super.key, this.initial, this.onChanged});

  /// Lit la devise préférée du secure storage. Fallback sur XOF.
  static Future<Devise> readPreferred(FlutterSecureStorage storage) async {
    try {
      final v = await storage.read(key: _kDevisePrefereeKey);
      return Devise.fromCode(v);
    } catch (_) {
      return Devise.reference();
    }
  }

  /// Persiste la devise préférée.
  static Future<void> writePreferred(
      FlutterSecureStorage storage, Devise devise) async {
    await storage.write(key: _kDevisePrefereeKey, value: devise.code);
  }

  @override
  State<DeviseSelector> createState() => _DeviseSelectorState();
}

class _DeviseSelectorState extends State<DeviseSelector> {
  late Devise _selected;

  @override
  void initState() {
    super.initState();
    _selected = widget.initial ?? Devise.reference();
  }

  @override
  Widget build(BuildContext context) {
    return DropdownButtonFormField<Devise>(
      value: _selected,
      decoration: const InputDecoration(
        labelText: 'Devise préférée',
        border: OutlineInputBorder(),
        prefixIcon: Icon(Icons.account_balance_wallet_outlined),
      ),
      items: Devise.values
          .map(
            (d) => DropdownMenuItem<Devise>(
              value: d,
              child: Text('${d.code} — ${d.libelle}'),
            ),
          )
          .toList(),
      onChanged: (d) {
        if (d == null) return;
        setState(() => _selected = d);
        widget.onChanged?.call(d);
      },
    );
  }
}
