/**
 * @module infra-sk/modules/ElementSk
 * @description <h2><code>ElementSk</code></h2>
 *
 */
import { render } from 'lit-html'
import { upgradeProperty } from 'elements-sk/upgradeProperty'

/**
 * A base class that records the connected status of the element in this._connected and provides a
 * _render() function that doesn't do anything if this this._connected is false.
 *
 * @example
 *
 * class MyElement extends ElementSk {
 *   greeting = "Hello";
 *
 *   constructor() {
 *     super((ele: MyElement) => html`<p>${ele.greeting} World!</p>`);
 *   }
 *
 *   connectedCallback() {
 *     super.connectedCallback();
 *     this._render();
 *   }
 * }
 */
export class ElementSk extends HTMLElement {
  protected _template: ((el: any) => unknown) | null = null;
  protected _connected: boolean = false;

  /**
   * @param templateFn A function that, when applied to this component, will returns the component's
   *     lit-html template.
   */
  constructor(templateFn?: (el: any) => unknown) {
    super();
    this._template = templateFn || null;
  }

  connectedCallback() {
    this._connected = true;
  }

  disconnectedCallback() {
    this._connected = false;
  }

  /**
   * Capture the value from the unupgraded instance and delete the property so
   * it does not shadow the custom element's own property setter.
   *
   * See this [Google Developers article]{@link
   *    https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties
   *    } for more details.
   *
   * @param name Property name.
   */
  protected _upgradeProperty(name: string) {
    upgradeProperty(this, name);
  }

  /**
   * Renders the lit-html template found at this._template if not-null, but only if
   * connectedCallback has been called.
   */
  protected _render() {
    if (this._connected && !!this._template) {
      render(this._template(this), this, {eventContext: this});
    }
  }
};
