import HTMLElement from '../html-element/HTMLElement.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import TextTrackKindEnum from '../html-media-element/TextTrackKindEnum.js';
import ElementEventAttributeUtility from '../element/ElementEventAttributeUtility.js';
/**
 * HTMLTrackElement
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement
 */
export default class HTMLTrackElement extends HTMLElement {
    // Events
    /* eslint-disable jsdoc/require-jsdoc */
    get oncuechange() {
        return ElementEventAttributeUtility.getEventListener(this, 'oncuechange');
    }
    set oncuechange(value) {
        this[PropertySymbol.propertyEventListeners].set('oncuechange', value);
    }
    /* eslint-enable jsdoc/require-jsdoc */
    /**
     * Returns kind.
     *
     * @returns Kind.
     */
    get kind() {
        const kind = this.getAttribute('kind');
        if (kind === null) {
            return TextTrackKindEnum.subtitles;
        }
        if (!TextTrackKindEnum[kind]) {
            return TextTrackKindEnum.metadata;
        }
        return kind;
    }
    /**
     * Sets kind.
     *
     * @param value Value.
     */
    set kind(value) {
        if (!TextTrackKindEnum[value]) {
            value = TextTrackKindEnum.metadata;
        }
        this.setAttribute('kind', value);
    }
    /**
     * Returns source.
     *
     * @returns Source.
     */
    get src() {
        if (!this.hasAttribute('src')) {
            return '';
        }
        try {
            return new URL(this.getAttribute('src'), this[PropertySymbol.ownerDocument].location.href)
                .href;
        }
        catch (e) {
            return this.getAttribute('src') || '';
        }
    }
    /**
     * Sets source.
     *
     * @param src Source.
     */
    set src(src) {
        this.setAttribute('src', src);
    }
    /**
     * Returns source language.
     *
     * @returns Source language.
     */
    get srclang() {
        return this.getAttribute('srclang') || '';
    }
    /**
     * Sets source language.
     *
     * @param value Value.
     */
    set srclang(value) {
        this.setAttribute('srclang', value);
    }
    /**
     * Returns label.
     *
     * @returns Label.
     */
    get label() {
        return this.getAttribute('label') || '';
    }
    /**
     * Sets label.
     *
     * @param value Value.
     */
    set label(value) {
        this.setAttribute('label', value);
    }
    /**
     * Returns default.
     *
     * @returns Default.
     */
    get default() {
        return this.hasAttribute('default');
    }
    /**
     * Sets default.
     *
     * @param value Value.
     */
    set default(value) {
        if (value) {
            this.setAttribute('default', '');
        }
        else {
            this.removeAttribute('default');
        }
    }
    /**
     * Returns ready state.
     *
     * @returns Ready state.
     */
    get readyState() {
        return 0;
    }
    /**
     * Returns the TextTrack object corresponding to the track element.
     *
     * @returns TextTrack
     */
    get track() {
        const textTrack = new this[PropertySymbol.window].TextTrack(PropertySymbol.illegalConstructor);
        textTrack[PropertySymbol.kind] = this.kind;
        textTrack[PropertySymbol.label] = this.label;
        textTrack[PropertySymbol.language] = this.srclang;
        textTrack[PropertySymbol.mode] = this.default ? 'showing' : 'disabled';
        textTrack[PropertySymbol.id] = this.id;
        return textTrack;
    }
}
//# sourceMappingURL=HTMLTrackElement.js.map