package org.intellimate.izou.system.sound;
import org.intellimate.izou.addon.AddOnModel;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
/**
* @author LeanderK
* @version 1.0
*/
public class MutingManager {
private final AddOnModel muting;
private final List<IzouSoundLine> mutingLines;
private final SoundManager soundManager;
private LocalTime limit = null;
private Future limitFuture;
public MutingManager(SoundManager soundManager, AddOnModel muting, IzouSoundLine line) {
this.muting = muting;
this.soundManager = soundManager;
mutingLines = new ArrayList<>();
mutingLines.add(line);
soundManager.muteOthers(muting);
}
public AddOnModel getMuting() {
return muting;
}
public synchronized void add(IzouSoundLine line) {
if (limit != null) {
limit = null;
limitFuture.cancel(true);
}
mutingLines.add(line);
}
public synchronized void cancel() {
soundManager.unmute();
}
public synchronized boolean isTimeOut() {
return limit != null && LocalTime.now().isAfter(limit);
}
public synchronized MutingManager remove(IzouSoundLine line) {
mutingLines.remove(line);
if (mutingLines.isEmpty()) {
limit = LocalTime.now().plus(2000L, ChronoUnit.MILLIS);
limitFuture = soundManager.getMain().getThreadPoolManager().getAddOnsThreadPool().submit(() -> {
try {
Thread.sleep(2000);
soundManager.unmute();
} catch (InterruptedException ignored) {
}
});
return this;
}
return this;
}
}