import '../core/api/meinweimar_api_client.dart';
import '../core/text/wp_text.dart';
import '../models/sponsor_location.dart';
class SponsorLocationRepository {
const SponsorLocationRepository(this.api);
final MeinWeimarApiClient api;
Future<List<SponsorLocation>> fetchAll({
required String languageCode,
String? campaignId,
String? partnerId,
}) async {
final query = <String, String>{'lang': languageCode};
if (campaignId?.isNotEmpty == true) query['campaign_id'] = campaignId!;
if (partnerId?.isNotEmpty == true) query['partner_id'] = partnerId!;
final json = await api.getJson('/sponsor-locations',
query: query, allowOfflineCache: false);
final items =
(json['items'] as List? ?? const []).whereType<Map<String, dynamic>>();
return items
.map(_fromJson)
.where((e) => e.latitude != 0 && e.longitude != 0)
.toList(growable: false);
}
SponsorLocation _fromJson(Map<String, dynamic> j) {
final address = j['address'] is Map
? Map<String, dynamic>.from(j['address'] as Map)
: const <String, dynamic>{};
final partner = j['partner'] is Map
? Map<String, dynamic>.from(j['partner'] as Map)
: const <String, dynamic>{};
return SponsorLocation(
id: j['id'].toString(),
title: WpText.plain(j['title']),
type: (j['location_type'] ?? 'custom').toString(),
latitude: (j['lat'] as num?)?.toDouble() ?? 0,
longitude: (j['lng'] as num?)?.toDouble() ?? 0,
address: WpText.nullablePlain(address['formatted']),
openingHours: WpText.nullablePlain(j['opening_hours']),
features: (j['features'] as List? ?? const [])
.map((e) => e.toString())
.toList(growable: false),
phone: WpText.nullablePlain(j['phone']),
website: WpText.url(j['website']),
partnerId: partner['id']?.toString(),
partnerName: WpText.nullablePlain(partner['title']),
campaignId: j['campaign_id']?.toString(),
priority: (j['priority'] as num?)?.round() ?? 50,
);
}
}

