import 'package:flutter/material.dart';

/// Modèle de données pour représenter un passage avec sa date, son type et son nombre
class PassageData {
  /// Date du passage
  final DateTime date;
  
  /// Identifiant du type de passage (1: Effectué, 2: À finaliser, 3: Refusé, etc.)
  final int typeId;
  
  /// Nombre de passages
  final int count;
  
  /// Couleur associée au type de passage
  final Color color;
  
  /// Icône associée au type de passage (chemin vers le fichier d'icône)
  final String iconPath;
  
  /// Titre du type de passage
  final String title;

  const PassageData({
    required this.date,
    required this.typeId,
    required this.count,
    required this.color,
    required this.iconPath,
    required this.title,
  });
  
  /// Crée une instance de PassageData à partir d'une date au format ISO 8601
  factory PassageData.fromIsoDate({
    required String isoDate,
    required int typeId,
    required int count,
    required Color color,
    required String iconPath,
    required String title,
  }) {
    return PassageData(
      date: DateTime.parse(isoDate),
      typeId: typeId,
      count: count,
      color: color,
      iconPath: iconPath,
      title: title,
    );
  }
}

/// Modèle de données pour représenter un règlement avec sa date, son type et son montant
class PaymentAmountData {
  /// Date du règlement
  final DateTime date;
  
  /// Identifiant du type de règlement (1: Espèces, 2: Chèques, 3: CB)
  final int typeId;
  
  /// Montant du règlement
  final double amount;
  
  /// Couleur associée au type de règlement
  final Color color;
  
  /// Icône associée au type de règlement (chemin vers le fichier d'icône ou IconData)
  final dynamic iconData;
  
  /// Titre du type de règlement
  final String title;
  
  /// Crée une instance de PaymentAmountData à partir d'une date au format ISO 8601
  factory PaymentAmountData.fromIsoDate({
    required String isoDate,
    required int typeId,
    required double amount,
    required Color color,
    required dynamic iconData,
    required String title,
  }) {
    return PaymentAmountData(
      date: DateTime.parse(isoDate),
      typeId: typeId,
      amount: amount,
      color: color,
      iconData: iconData,
      title: title,
    );
  }

  const PaymentAmountData({
    required this.date,
    required this.typeId,
    required this.amount,
    required this.color,
    required this.iconData,
    required this.title,
  });
}
