import {Component, Element, Prop, Host, h} from '@stencil/core';
import {HeadingVarians, HeadingSectionVariants} from '../../utils/utils';

@Component({
  tag: 'hy-heading',
  styleUrls: {default: 'heading.scss', wide: 'heading-fw.scss'},
  scoped: true,
  shadow: false,
})
export class Heading {
  /**
   * @type {*}
   */
  @Prop() heading: HeadingVarians = HeadingVarians.default as any;
  /**
   * @type {*}
   */
  @Prop() section: HeadingSectionVariants = HeadingSectionVariants.default as any;
  @Prop() negative: boolean = false;
  @Prop() headerstyle: string = 'common';
  @Element() el: HTMLElement;

  componentDidLoad() {
    let hyMainDiv = this.el.closest('.hy-main');
    if (hyMainDiv) {
      if (!hyMainDiv.classList.contains('with-sidebar')) {
        this.headerstyle = 'large';
      }
    }
  }

  render() {
    const headingInVariants = this.heading in HeadingVarians;
    const classAttributes = ['hy-heading', this.negative ? 'negative' : '', `hy-heading__${this.section}`];

    const sectionClassAttributes = [`hy-heading__${this.section}--divider`].join(' ');

    const containerSectionClass = [
      'hy-heading__container',
      `hy-heading__container__${this.section}`,
      `hy-heading__container__${this.headerstyle}`,
    ].join(' ');

    return (
      <Host>
        {headingInVariants ? (
          <div class={containerSectionClass}>
            <this.heading class={classAttributes.join(' ')}>
              <slot />
            </this.heading>

            <span class={sectionClassAttributes}></span>
          </div>
        ) : (
          <div class={containerSectionClass}>
            <HeadingVarians.default class={classAttributes.join(' ')}>
              <slot />
            </HeadingVarians.default>

            <span class={sectionClassAttributes}></span>
          </div>
        )}
      </Host>
    );
  }
}