import { Injectable } from '@angular/core';
import gsap from 'gsap';

@Injectable({
  providedIn: 'root',
})
export class ModalAnimationService {
  private readonly defaultDuration = 0.3;
  private readonly defaultEase = 'power2.out';

  openModal(modalElement: HTMLElement, overlayElement: HTMLElement) {
    gsap.set(overlayElement, { opacity: 0, display: 'block' });
    gsap.set(modalElement, {
      opacity: 0,
      scale: 0.95,
      y: 20,
      display: 'block',
    });

    gsap.to(overlayElement, {
      opacity: 1,
      duration: this.defaultDuration,
      ease: this.defaultEase,
    });

    gsap.to(modalElement, {
      opacity: 1,
      scale: 1,
      y: 0,
      duration: this.defaultDuration,
      ease: this.defaultEase,
    });
  }

  closeModal(modalElement: HTMLElement, overlayElement: HTMLElement, onComplete?: () => void) {
    gsap.to([overlayElement, modalElement], {
      opacity: 0,
      duration: this.defaultDuration,
      ease: this.defaultEase,
      onComplete: () => {
        gsap.set([overlayElement, modalElement], { display: 'none' });
        onComplete?.();
      },
    });

    gsap.to(modalElement, {
      scale: 0.95,
      y: 20,
      duration: this.defaultDuration,
      ease: this.defaultEase,
    });
  }
}
