import { customElement, property, html, type TemplateResult, DeesElement, type CSSResult, } from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';

declare global {
  interface HTMLElementTagNameMap {
    'dees-input-quantityselector': DeesInputQuantitySelector;
  }
}

@customElement('dees-input-quantityselector')
export class DeesInputQuantitySelector extends DeesElement {
  public static demo = () => html`<dees-input-quantityselector></dees-input-quantityselector>`;

  // INSTANCE
  public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();

  @property()
  public label: string = 'Label';

  @property({
    type: String,
    reflect: true,
  })
  public key: string;

  @property({
    type: Number
  })
  public value: number = 1;

  @property({
    type: Boolean,
  })
  public required: boolean = false;

  @property({
    type: Boolean
  })
  public disabled: boolean = false;

  constructor() {
    super();
  }

  public render(): TemplateResult {
    return html`
      ${domtools.elementBasic.styles}
      <style>
        :host {
          display: block;
          width: 110px;
          user-select: none;
        }
        .maincontainer {
          transition: all 0.1s;
          font-size: 14px;
          display: grid;
          grid-template-columns: 33% 34% 33%;
          text-align: center;
          background:none;
          line-height: 40px;
          padding: 0px;
          min-width: 100px;
          color: ${this.goBright ? '#666' : '#CCC'};
          border: ${this.goBright ? '1px solid #333' : '1px solid #CCC'};
          border-radius: 4px;
        }

        .mainContainer:hover {
          color: ${this.goBright ? '#333' : '#fff'};
          border: ${this.goBright ? '1px solid #333' : '1px solid #fff'};
        }

        .minus {
          padding-left: 5px;
        }

        .plus {
          padding-right: 5px;
        }

        .selector {
          text-align: center;
          font-size: 20px;
        }

        .selector:hover {
        }

        .quantity {
          text-align: center;
        }

        
      </style>

      <div class="maincontainer">
        <div class="selector minus" @click="${() => {this.decrease();}}">-</div>
        <div class="quantity">${this.value}</div>
        <div class="selector plus" @click="${() => {this.increase();}}">+</div>
      </div>
    `;
  }

  public increase () {
    this.value++;
    this.changeSubject.next(this);
  }

  public decrease () {
    if (this.value > 0) {
      this.value--;
    } else {
      // nothing to do here
    }
    this.changeSubject.next(this);
  }
}