import 'package:flutter/material.dart';

import 'app_theme.dart';

/// کشِ رنگ و برچسبِ رتبه‌ها که از سرور می‌آید (tier → گرادیان/برچسب). با هر بار
/// خواندنِ کاتالوگِ قاب‌ها پر می‌شود؛ تا آن لحظه از fallbackِ خنثی استفاده می‌شود.
class RankStyles {
  RankStyles._();
  static final RankStyles I = RankStyles._();

  final Map<String, List<Color>> _grad = {};
  final Map<String, String> _label = {};

  /// کش را از کاتالوگِ سرور پر می‌کند. هر آیتم id/label/c1/c2 دارد.
  void setFromCatalog(
    Iterable<({String id, String label, String c1, String c2})> tiers,
  ) {
    for (final t in tiers) {
      final g = _parse(t.c1, t.c2);
      if (g != null) _grad[t.id] = g;
      if (t.label.isNotEmpty) _label[t.id] = t.label;
    }
  }

  /// گرادیانِ رتبه (از سرور، وگرنه fallbackِ خنثیِ طلایی).
  List<Color> gradient(String tier) => _grad[tier] ?? _fallbackGrad;

  /// برچسبِ فارسیِ رتبه (از سرور، وگرنه خودِ شناسه).
  String label(String tier) => _label[tier] ?? tier;

  static const _fallbackGrad = [AppColors.gold, AppColors.goldDark];

  static List<Color>? _parse(String c1, String c2) {
    final a = _hex(c1), b = _hex(c2);
    if (a == null || b == null) return null;
    return [a, b];
  }

  static Color? _hex(String s) {
    s = s.trim().replaceAll('#', '');
    if (s.length != 6) return null;
    final v = int.tryParse(s, radix: 16);
    return v == null ? null : Color(0xFF000000 | v);
  }
}

/// گرادیانِ رنگیِ رتبه (از کشِ سرور).
List<Color> rankGradient(String tier) => RankStyles.I.gradient(tier);

/// برچسبِ فارسیِ رتبه (از کشِ سرور).
String rankLabel(String tier) => RankStyles.I.label(tier);
