/// Fichier contenant toutes les constantes utilisées dans l'application /// Centralise les clés, noms de boîtes Hive, et autres constantes /// pour faciliter la maintenance et éviter les erreurs de frappe library; import 'package:flutter/foundation.dart' show kIsWeb, debugPrint; import 'package:flutter/material.dart'; class AppKeys { // Noms des boîtes Hive static const String userBoxName = 'user'; static const String amicaleBoxName = 'amicale'; static const String clientsBoxName = 'clients'; static const String operationsBoxName = 'operations'; static const String sectorsBoxName = 'sectors'; static const String passagesBoxName = 'passages'; static const String settingsBoxName = 'settings'; static const String membresBoxName = 'membres'; static const String userSectorBoxName = 'user_sector'; static const String chatRoomsBoxName = 'chat_rooms'; static const String chatMessagesBoxName = 'chat_messages'; static const String regionsBoxName = 'regions'; static const String pendingRequestsBoxName = 'pending_requests'; static const String tempEntitiesBoxName = 'temp_entities'; // Rôles utilisateurs static const int roleUser = 1; static const int roleAdmin1 = 2; static const int roleAdmin2 = 4; static const int roleAdmin3 = 9; // URLs API pour les différents environnements static const String baseApiUrlDev = 'https://dapp.geosector.fr/api'; static const String baseApiUrlRec = 'https://rapp.geosector.fr/api'; static const String baseApiUrlProd = 'https://app3.geosector.fr/api'; // Identifiants d'application pour les différents environnements static const String appIdentifierDev = 'dapp.geosector.fr'; static const String appIdentifierRec = 'rapp.geosector.fr'; static const String appIdentifierProd = 'app3.geosector.fr'; // Endpoints API static const String loginEndpoint = '/login'; static const String logoutEndpoint = '/logout'; static const String registerEndpoint = '/register'; static const String syncDataEndpoint = '/data/sync'; static const String sectorsEndpoint = '/sectors'; // Durées static const Duration connectionTimeout = Duration(seconds: 15); static const Duration receiveTimeout = Duration(seconds: 30); static const Duration sessionDefaultExpiry = Duration(days: 7); // Clés API externes static const String mapboxApiKeyDev = 'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY21hanVmNjN5MTM5djJtczdsMW92cjQ0ciJ9.pUCMuvWPB3cuBaPh4ywTAw'; static const String mapboxApiKeyRec = 'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY21hanVlZ3FiMGx0NDJpc2k4YnkxaWZ2dSJ9.OqGJtjlWRgB4fIjECCB8WA'; static const String mapboxApiKeyProd = 'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY204dTNhNmd0MGV1ZzJqc2pnNnB0NjYxdSJ9.TA5Mvliyn91Oi01F_2Yuxw'; // Méthode pour obtenir la clé API Mapbox en fonction de l'environnement actuel static String getMapboxApiKey(String environment) { // Utiliser l'environnement passé en paramètre pour déterminer quelle clé retourner switch (environment) { case 'DEV': return mapboxApiKeyDev; case 'REC': return mapboxApiKeyRec; case 'PROD': default: return mapboxApiKeyProd; } } // Pour la compatibilité avec le code existant, on garde un getter qui utilise // l'environnement actuel (à utiliser uniquement si l'ApiService n'est pas disponible) static String get mapboxApiKey { // Note: Cette implémentation est une solution de secours et devrait être évitée // Il est préférable d'utiliser getMapboxApiKey(apiService.getCurrentEnvironment()) // Détection basique de l'environnement basée sur l'URL en mode web if (kIsWeb) { // Essayer d'accéder à l'URL actuelle (fonctionne uniquement en mode web) try { final String currentUrl = Uri.base.toString().toLowerCase(); if (currentUrl.contains('app.geo.dev')) { return mapboxApiKeyDev; } else if (currentUrl.contains('rapp.geosector.fr')) { return mapboxApiKeyRec; } } catch (e) { // En cas d'erreur, utiliser la clé de production par défaut debugPrint('Erreur lors de la détection de l\'environnement: $e'); } } // Par défaut, retourner la clé de production return mapboxApiKeyProd; } // Headers static const String sessionHeader = 'Authorization'; // En-têtes par défaut pour les requêtes API // Note: Ces en-têtes seront complétés dynamiquement dans ApiService static const Map defaultHeaders = { 'Content-Type': 'application/json', 'X-Client-Type': kIsWeb ? 'web' : 'mobile', 'Accept': 'application/json', }; // Civilités static const Map civilites = { 1: 'M.', 2: 'Mme', }; // Types de règlements (basés sur la maquette Figma) static const Map> typesReglements = { 1: { 'titre': 'Espèce', 'couleur': 0xFFDAA520, // Goldenrod 'icon_data': Icons.payments_outlined, }, 2: { 'titre': 'Chèque', 'couleur': 0xFF7E57C2, // Violet foncé (Material Design Deep Purple 400) 'icon_data': Icons.account_balance_wallet_outlined, }, 3: { 'titre': 'CB', 'couleur': 0xFF0099FF, // Bleu flashy 'icon_data': Icons.credit_card, }, 4: { 'titre': 'Non renseigné', 'couleur': 0xFF9E9E9E, // Gris moyen 'icon_data': Icons.help_outline, }, }; // Types de passages (basés sur la maquette Figma) static const Map> typesPassages = { 1: { 'titres': 'Effectués', 'titre': 'Effectué', 'couleur1': 0xFF00E09D, // Vert (Figma) 'couleur2': 0xFF00E09D, // Vert (Figma) 'couleur3': 0xFF00E09D, // Vert (Figma) 'icon_data': Icons.task_alt, }, 2: { 'titres': 'À finaliser', 'titre': 'À finaliser', 'couleur1': 0xFFFFFFFF, // Blanc (nbPassages=0) 'couleur2': 0xFFFFB978, // Orange moyen (nbPassages=1) 'couleur3': 0xFFE66F00, // Orange foncé (nbPassages>1) 'icon_data': Icons.refresh, }, 3: { 'titres': 'Refusés', 'titre': 'Refusé', 'couleur1': 0xFFE41B13, // Rouge (Figma) 'couleur2': 0xFFE41B13, // Rouge (Figma) 'couleur3': 0xFFE41B13, // Rouge (Figma) 'icon_data': Icons.block, }, 4: { 'titres': 'Dons', 'titre': 'Don', 'couleur1': 0xFF395AA7, // Bleu (Figma) 'couleur2': 0xFF395AA7, // Bleu (Figma) 'couleur3': 0xFF395AA7, // Bleu (Figma) 'icon_data': Icons.volunteer_activism, }, 5: { 'titres': 'Lots', 'titre': 'Lot', 'couleur1': 0xFF20335E, // Bleu foncé (Figma) 'couleur2': 0xFF20335E, // Bleu foncé (Figma) 'couleur3': 0xFF20335E, // Bleu foncé (Figma) 'icon_data': Icons.layers, }, 6: { 'titres': 'Maisons vides', 'titre': 'Maison vide', 'couleur1': 0xFF757575, // Gris foncé (Material Design 600) 'couleur2': 0xFF757575, // Gris foncé (Material Design 600) 'couleur3': 0xFF757575, // Gris foncé (Material Design 600) 'icon_data': Icons.home_outlined, }, }; }