console.log('wordle solver ...')

let form = document.querySelector('[name=verify')

let greenLetters = document.querySelectorAll('#greenLetters')
let yellowLetters = document.querySelectorAll('#yellowLetters')
let greyLetters = document.querySelectorAll('#greyLetters')
let wordleSolverData = document.getElementById('wordleSolverData')

let wordleWordCount = document.querySelector('#wordleWordCount')
let wordleSolvererrorMsg = document.querySelector('#wordleSolvererrorMsg')
let wordlesolver_submit = document.getElementById('wordlesolver_submit')
let newWordsLength = 0

let errMessage = document.querySelector('.errMessage')
let wrapper = document.querySelector('.wrapper')
let addMore = document.querySelector('#addMore')

addMore.addEventListener('click', (e) => {
  e.preventDefault()
  let div = document.createElement('div')
  div.classList.add('d-flex')
  div.classList.add('mt-2')

  for (let i = 20; i <= 24; i++) {
    let input = document.createElement('input')
    input.type = 'text'
    input.setAttribute('maxlength', '1')
    input.setAttribute('autocomplete', 'off')
    if (i <= 24) {
      input.setAttribute('tabIndex', i)
    }
    let classes = ['wordleSolver-field', 'greyLetters', 'form-control', 'px-5']
    input.classList.add(...classes)
    input.id = 'greyLetters'
    div.append(input)
    wrapper.append(div)
  }
})

const wordleSolver = async (value, value2, value3, greenWithIndex) => {
  try {
    let result = ''
    wordleWordCount.innerHTML = 'Searching for best possible letters...'
    let response = await fetch('/.netlify/functions/wordleSolver', {
      method: 'POST',
      body: JSON.stringify({
        greenLetters: value,
        yellowLetters: value2,
        greyLetters: value3,
        greenWithIndex: greenWithIndex,
      }),
    })
    const data = await response.json()

    let ok = true
    if (data.length === 0) {
      newWordsLength = ''
      wordleSolverData.innerHTML = ''
      wordleSolvererrorMsg.classList.add('alert-danger')
      wordleSolvererrorMsg.innerHTML = 'Sorry!! No words found'
    } else {
      wordleSolvererrorMsg.classList.remove('alert-danger')
      wordleSolvererrorMsg.innerHTML = ''
      wordleSolverData.innerHTML = ''
      newWordsLength = ''
      newWordsLength += data.length
      result = data.map((item) => {
        if (item.length === 1) {
          ok = false
          newWordsLength = newWordsLength - 1
        } else {
          let ScrabbleLetterScore = ScrabbleScore()
          sum = 0
          item = item.toLowerCase()
          for (let i = 0; i < item.length; i++) {
            sum += ScrabbleLetterScore[item[i]] || 0 // for unknown characters
          }
          return `
          <a class="anchor__style" title="Lookup python in Dictionary" target="_blank" href="/word-meaning?search=${item.toLowerCase()}">
          <li>
          ${item.toLowerCase()}
          <span class="points" value="${sum}" style="position:relative; top:4px; font-size:12px"> ${sum}</span>
          </li>
          </a>
          `
        }
      })
      if (ok) {
        wordleSolverData.innerHTML += `
            <div class="allfiveletterswords wordlistContainer">
                <div class="wordListHeading">
                    <h3 class="lead">All 5 Letter Words</h3>
                </div>
                <div class="wordList">
                    <ul class="ul list-unstyled">
                     ${result.join('')}
                    </ul>
                </div>
            </div>
            `
      }
    }
    if (newWordsLength === 0) {
      wordleSolvererrorMsg.classList.add('alert-danger')
      wordleSolvererrorMsg.innerHTML = 'Sorry!! No words found'
    } else {
      wordleWordCount.innerHTML = `<strong>${newWordsLength} Results</strong>`
    }
  } catch (error) {
    console.log(error)
  }
}

for (let g = 0; g < greenLetters.length; g++) {
  const elem = greenLetters[g]
  elem.addEventListener('input', (e) => {
    if (e.target.value) {
      e.target.classList.add('ws-fcs')
    } else {
      e.target.classList.remove('ws-fcs')
    }
  })
}
for (let y = 0; y < yellowLetters.length; y++) {
  const elem = yellowLetters[y]
  elem.addEventListener('input', (e) => {
    if (e.target.value) {
      e.target.classList.add('ws-fcs2')
    } else {
      e.target.classList.remove('ws-fcs2')
    }
  })
}
for (let e = 0; e < greyLetters.length; e++) {
  const elem = greyLetters[e]
  elem.addEventListener('input', (e) => {
    if (e.target.value) {
      e.target.classList.add('ws-fcs3')
    } else {
      e.target.classList.remove('ws-fcs3')
    }
  })
}

const getLetters = (object) => {
  let letters = []
  if (typeof object === 'string') {
    object = document.querySelectorAll(object)
  }
  for (let item of object) {
    if (item.value.trim().length === 1) {
      letters.push(item.value.toLowerCase())
    }
  }
  return letters
}
const getIndexs = (object) => {
  let index = []
  if (typeof object === 'string') {
    object = document.querySelectorAll(object)
  }
  for (let item of object) {
    if (item.value.trim().length === 1) {
      index.push({
        value: item.value.toLowerCase(),
        index: item.dataset.id,
      })
    }
  }
  return index
}

function handleSubmit(e) {
  e.preventDefault()
  let greenLetter = getLetters('.greenLetters')
  let yellowLetters = getLetters('.yellowLetters')
  let greyLetters = getLetters('.greyLetters')
  let greenWithIndex = getIndexs('.greenWithIndex')
  if (
    greenLetters[0].value !== '' ||
    greenLetters[1].value !== '' ||
    greenLetters[2].value !== '' ||
    greenLetters[3].value !== '' ||
    greenLetters[4].value !== ''
  ) {
    errMessage.innerHTML = ''
    errMessage.classList.remove('alert-danger')
    errMessage.style.display = 'none'
    wordleSolver(greenLetter, yellowLetters, greyLetters, greenWithIndex)
  } else {
    errMessage.innerHTML = 'You must enter at least 1 green letter'
    errMessage.classList.add('alert-danger')
    errMessage.style.display = 'block'
  }
}
form.addEventListener('submit', handleSubmit)

// Scrabble Point Array
const ScrabbleScore = () => {
  let twl06_sowpods = {
    a: 1,
    e: 1,
    i: 1,
    o: 1,
    u: 1,
    l: 1,
    n: 1,
    r: 1,
    s: 1,
    t: 1,
    d: 2,
    g: 2,
    b: 3,
    c: 3,
    m: 3,
    p: 3,
    f: 4,
    h: 4,
    v: 4,
    w: 4,
    y: 4,
    k: 5,
    j: 8,
    x: 8,
    q: 10,
    z: 10,
  }
  return twl06_sowpods
}