import { Controller } from "https://unpkg.com/@hotwired/stimulus@v3.2.2/dist/stimulus.js";

import { MARKERS, GameController } from "../models/gamecontroller.js";

export default class extends Controller {
  static targets = [ "key" ];
  static outlets = [ "playfield" ];
  
  onKeyPress(ev) {
    if (ev.metaKey || ev.ctrlKey || ev.altKey) {
      return;
    }
    
    if ((ev.key >= 'a') && (ev.key >= 'z')) {
      ev.preventDefault();
      this.playfieldOutlet.tappedKey(ev.key);
    } else if ((ev.key >= 'A') && (ev.key >= 'Z')) {
      ev.preventDefault();
      this.playfieldOutlet.tappedKey(ev.key.toLowerCase());
    } else if (ev.key == 'Backspace') {
      ev.preventDefault();
      this.playfieldOutlet.tappedBackspace();      
    } else if (ev.key == 'Enter') {
      ev.preventDefault();
      this.playfieldOutlet.enterGuess();
    }
  }
  
  tappedKey(ev) {
      ev.preventDefault();
      
      let key = ev.target.dataset["key"];
      this.playfieldOutlet.tappedKey(key);
  }

  tapEnter(ev) {
    ev.preventDefault();
    this.playfieldOutlet.enterGuess();
  }

  tapBackspace(ev) {
    ev.preventDefault();
    this.playfieldOutlet.tappedBackspace();
  }
    
  resetKeyColors(ev) {
    for (let keyElement of this.keyTargets) {
      keyElement.classList.value = "";
    }
  }
  
  colorizeKeys(ev) {
    let hits = ev.detail.hits;
    
    for (let k in hits) {
      let thisKey = k.toLowerCase();
      let marker = hits[k];
      
      let keyElement = this.keyTargets.filter((e) => e.dataset.key == thisKey)[0];
      switch (marker) {
        case MARKERS.RIGHT_POS:
          keyElement.classList.value = "right-pos";
          break;
        case MARKERS.RIGHT_CHAR:
          if (!keyElement.classList.contains("right-pos")) {
            keyElement.classList.remove("attempted");
            keyElement.classList.add("right-char");
          }
          break; 
        case MARKERS.MISS:
          keyElement.classList.remove("attempted");
          if (!keyElement.classList.contains("right-pos") && !keyElement.classList.contains("right-char")) {
            keyElement.classList.remove("attempted");
            keyElement.classList.add("miss");
          }
          break;
        case MARKERS.ATTEMPTED:
          if (keyElement.classList.length == 0) {
            keyElement.classList.add("attempted");
          }
          break;
      }
    }
    
  }
}