import 'package:flutter/material.dart';
import 'dart:math' as math;

/// Painter pour dessiner des petits points blancs semi-transparents sur un fond
/// Utilisé pour créer un effet visuel subtil sur les fonds dégradés
class DotsPainter extends CustomPainter {
  /// Opacité des points (0.0 à 1.0)
  final double opacity;

  /// Seed pour le générateur aléatoire (pour consistance du pattern)
  final int seed;

  /// Densité des points (nombre de pixels par point)
  /// Plus la valeur est élevée, moins il y a de points
  final int density;

  const DotsPainter({
    this.opacity = 0.5,
    this.seed = 42,
    this.density = 1500,
  });

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..color = Colors.white.withOpacity(opacity)
      ..style = PaintingStyle.fill;

    final random = math.Random(seed);
    final numberOfDots = (size.width * size.height) ~/ density;

    for (int i = 0; i < numberOfDots; i++) {
      final x = random.nextDouble() * size.width;
      final y = random.nextDouble() * size.height;
      final radius = 1.0 + random.nextDouble() * 2.0;
      canvas.drawCircle(Offset(x, y), radius, paint);
    }
  }

  @override
  bool shouldRepaint(covariant DotsPainter oldDelegate) {
    return oldDelegate.opacity != opacity ||
        oldDelegate.seed != seed ||
        oldDelegate.density != density;
  }
}
