import { TextField } from "./TextField";

export class TrackCard extends HTMLElement {
  trackNumberContainer: TextField;
  nameContainer: TextField;
  albumContainer: TextField;
  artistContainer: TextField;
  durationContainer: TextField;

  static get observedAttributes() {
    return ["trackId", "trackNumber", "name", "album", "artist", "duration"];
  }

  constructor() {
    super();

    this.trackNumberContainer = document.createElement("text-field");

    this.nameContainer = document.createElement("text-field");
    this.nameContainer.classList.add("track-card__name");

    this.albumContainer = document.createElement("text-field");
    this.albumContainer.classList.add("track-card__album");

    this.artistContainer = document.createElement("text-field");
    this.artistContainer.classList.add("track-card__artist");

    this.durationContainer = document.createElement("text-field");
    this.durationContainer.classList.add("track-card__duration");
  }

  get trackId(): string | null {
    return this.getAttribute("id");
  }

  set trackId(id: string | null) {
    if (id) {
      this.setAttribute("trackId", id);
    } else {
      this.removeAttribute("trackId");
    }
  }

  get name(): string | null {
    return this.getAttribute("name");
  }

  set name(name: string | null) {
    if (name) {
      this.setAttribute("name", name);
      this.nameContainer.text = name;
    } else {
      this.removeAttribute("open");
      this.nameContainer.text = null;
    }
  }

  get artist(): string | null {
    return this.getAttribute("artist");
  }

  set artist(artist: string | null) {
    if (artist) {
      this.setAttribute("artist", artist);
      this.artistContainer.text = artist;
    } else {
      this.removeAttribute("open");
      this.artistContainer.text = null;
    }
  }

  get album(): string | null {
    return this.getAttribute("album");
  }

  set album(album: string | null) {
    if (album) {
      this.setAttribute("album", album);
      this.albumContainer.text = album;
    } else {
      this.removeAttribute("open");
      this.albumContainer.text = null;
    }
  }

  get duration(): string | null {
    return this.getAttribute("duration");
  }

  set duration(duration: string | null) {
    if (duration) {
      this.setAttribute("duration", duration);
      this.durationContainer.text = duration;
    } else {
      this.removeAttribute("open");
      this.durationContainer.text = null;
    }
  }

  connectedCallback() {
    const container = document.createElement("data-card");
    container.classList.add("track-card");

    // this.appendChild(this.trackNumberContainer);
    container.appendChild(this.nameContainer);
    container.appendChild(this.albumContainer);
    container.appendChild(this.artistContainer);
    container.appendChild(this.durationContainer);

    this.appendChild(container);
  }
}