#include "game.h"
#include <time.h>
#include <stdlib.h>
#include <string.h>

#define MAX_RAND_TRIES_PER_WORD 20
#define EMPTY_CHAR 0

//TODO: Spiellogik implementieren:
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
   * restliche Felder mit zufälligen Buchstaben füllen */

// Creates the word salad by placing words randomly and filling empty spaces
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
{
   int saladclone[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN];
   int wordsplacedcounter=0;
   for (int i=0;i<MAX_SEARCH_FIELD_LEN;i++){
      for (int j=0;j<MAX_SEARCH_FIELD_LEN;j++) {
         saladclone[i][j] = 0;
      }
   }
   srand(time(NULL));

   for (int i = 0;i < searchFieldLen; i++) {          //Feld mit random Buchstaben füllen
      for (int j = 0; j < searchFieldLen; j++) {
         salad[i][j] = 'A' + (rand() % 26);
      }
   }

    //Array das mit der Anzahl der Wörter gefüllt wird
   int wordOrientation[wordCount];

   for (int w = 0;w < wordCount; w++) {                  //Randomizer, ob Wort horizontal oder vertikal wird
      wordOrientation[w] = rand() % 2;                   //vertikal = 0, horizontal = 1
   }

   for (int w = 0;w < wordCount; w++) {
      const char *word = words[w];                       //zeiger word zeigt auf Anfang des aktuellen Wortes
      int wordLen = strlen(word);                        //Länge des Wortes wird ermittelt
      int horizontal = wordOrientation[w];               //horizontal bekommt 0 und 1 aus dem array
      int wordPlaced = 0;
      int check=0;



      for (int tries = 0;tries < MAX_RAND_TRIES_PER_WORD && !wordPlaced;tries++) {     //Das Wort wird entweder in eine Zeile oder Spalte random plaziert
         int row = rand() % searchFieldLen;
         int col = rand() % searchFieldLen;
         check = 0;

         if (horizontal) {
            if (col + wordLen > searchFieldLen)           //erst wird überprüft, ob das Wort überlappt
               continue;

            for (int i=0;i < wordLen; i++) {
               if (saladclone[row][col + i]==1) {
                  check=1;
               }
            }
            if (check == 1) continue;

            printf("Wort: %d,%d \n", row,col);

            for (int i = 0;i < wordLen; i++) {            //Wort wird in Spalte geschrieben
               salad[row][col + i] = word[i];

               saladclone[row][col + i] = 1;
            }
            wordPlaced = 1;
            wordsplacedcounter++;

         }
         else {
            if (row + wordLen > searchFieldLen)           //erst wird überprüft, ob das Wort überlappt
               continue;

            for (int i=0;i < wordLen; i++) {
               if (saladclone[row+i][col]==1) {
                  check=1;
               }
            }
            if (check == 1) continue;

            printf("Wort: %d,%d \n", row,col);

            for (int i = 0;i < wordLen; i++) {            //Wort wird in Zeile geschrieben
               salad[row + i][col] = word[i];

               saladclone[row+i][col] = 1;
            }
            wordPlaced = 1;
            wordsplacedcounter++;
         }
      }
   }
   return wordsplacedcounter;
}

// Prints the word salad to console
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
{
   printf("WORTSALAT:\n\n");
   for (int i = 0; i < searchFieldLen; i++) {
      for (int j = 0; j < searchFieldLen; j++) {
         printf("%c ", salad[i][j]);
      }
      printf("\n");
   }


}
