"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UNSTABLE_SecondsCountdownService = void 0;
const date_1 = require("../../utils/date");
const M_SECONDS_PER_SECOND = 1000;
/**
 * вспомогательный класс, предоставляющий функционал с текстом убывающих секунд
 */
// biome-ignore lint/style/useNamingConvention: <Может использоваться продуктами>
class UNSTABLE_SecondsCountdownService {
    constructor(params) {
        this.params = params;
        this.timer = 0;
        this.createTargetDateBySecond = (seconds = 0) => new Date(Date.now() + seconds * M_SECONDS_PER_SECOND);
        this.setTextTime = (text) => {
            this.textTime = text;
            this.params.onUpdateTextTime?.(text);
        };
        this.setActivity = (isActive) => {
            this.isActive = isActive;
            this.params.onUpdateActivity?.(isActive);
        };
        this.run = () => {
            if (this.difference > 0) {
                this.setTextTime(this.textDifference);
                this.timer = setTimeout(() => {
                    this.run();
                }, M_SECONDS_PER_SECOND);
                return this.setActivity(true);
            }
            this.setTextTime('00:00');
            return this.setActivity(false);
        };
        /**
         * Метод для перезапуска таймера на новую дату
         * @enum number - количество секунд от текущего момента
         * @enum Date - дата к которой должен стартовать счетчик
         */
        this.restart = (value) => {
            this.destroy();
            if (typeof value === 'number') {
                this.targetDate = this.createTargetDateBySecond(value);
            }
            else if (!isNaN(Number(+value))) {
                this.targetDate = value;
            }
            else {
                return;
            }
            this.run();
        };
        this.destroy = () => {
            clearTimeout(this.timer);
        };
        this.isActive = params.isInitialActive ?? true;
        this.targetDate = this.params.targetDate
            ? this.params.targetDate
            : this.createTargetDateBySecond(params.seconds);
        this.textTime = this.textDifference;
        if (!this.isActive) {
            return;
        }
        this.run();
    }
    get difference() {
        return Math.max(+this.targetDate - Date.now(), 0);
    }
    get textDifference() {
        return (0, date_1.formatDate)(new Date(this.difference), 'mm:ss', ':');
    }
}
exports.UNSTABLE_SecondsCountdownService = UNSTABLE_SecondsCountdownService;
