import 'package:flutter/material.dart';

/// 애니메이션 컨트롤러 관리를 위한 헬퍼 클래스
class AnimationControllerHelper {
  /// 모든 애니메이션 컨트롤러를 초기화하는 메서드
  static void initControllers({
    required TickerProvider vsync,
    required AnimationController fadeController,
    required AnimationController scaleController,
    required AnimationController rotateController,
    required AnimationController slideController,
    required AnimationController pulseController,
    required AnimationController waveController,
  }) {
    // 페이드 컨트롤러 초기화
    fadeController.duration = const Duration(milliseconds: 600);
    fadeController.forward();

    // 스케일 컨트롤러 초기화
    scaleController.duration = const Duration(milliseconds: 600);
    scaleController.forward();

    // 회전 컨트롤러 초기화
    rotateController.duration = const Duration(seconds: 10);
    rotateController.repeat();

    // 슬라이드 컨트롤러 초기화
    slideController.duration = const Duration(milliseconds: 600);
    slideController.forward();

    // 펄스 컨트롤러 초기화
    pulseController.duration = const Duration(milliseconds: 1500);
    pulseController.repeat(reverse: true);

    // 웨이브 컨트롤러 초기화: 반복으로 부드럽게 루프
    waveController.duration = const Duration(milliseconds: 8000);
    waveController.repeat();
  }

  /// 모든 애니메이션 컨트롤러를 재설정하는 메서드
  static void resetAnimations({
    required AnimationController fadeController,
    required AnimationController scaleController,
    required AnimationController slideController,
    required AnimationController pulseController,
    required AnimationController waveController,
  }) {
    fadeController.reset();
    scaleController.reset();
    slideController.reset();

    pulseController.repeat(reverse: true);
    waveController.repeat();

    fadeController.forward();
    scaleController.forward();
    slideController.forward();
  }

  /// 모든 애니메이션 컨트롤러를 해제하는 메서드
  static void disposeControllers({
    required AnimationController fadeController,
    required AnimationController scaleController,
    required AnimationController rotateController,
    required AnimationController slideController,
    required AnimationController pulseController,
    required AnimationController waveController,
  }) {
    fadeController.dispose();
    scaleController.dispose();
    rotateController.dispose();
    slideController.dispose();
    pulseController.dispose();
    waveController.dispose();
  }
}
