#include "dowa.h"

char *Dowa_Int32ToString(uint32 int32, char *buffer)
{
  sprintf(buffer, "%d", int32);
  return buffer;
}

const char *Dowa_String_Slice(const char *from, size_t start, size_t end)
{
  static char buffer[1024] = {0};
  size_t buffer_pos = 0;
  for (int i = start; start < strlen(from) || start < end; i++)
  {
    buffer[buffer_pos++] = from[i];
  }
  return buffer;
}

int32 Dowa_String_Pos_Find(const char *from, const char *value, const size_t from_length, const size_t value_length)
{
  if (value == NULL || from == NULL)
    return -1;

  for (int32 i = 0; i < from_length - value_length; i++)
  {
    if (from[i] == value[0])
    {
      int32 j = 0; 
      while (j < value_length && value[j] == from[i+j])
        j++;

      if (j == value_length)
        return i;
    }
  }
  return -1;
}

char *Dowa_String_Find(const char *from, const char *value, const size_t from_length, const size_t value_length)
{
  if (value == NULL || from == NULL)
    return NULL;

  for (int32 i = 0; i < from_length - value_length; i++)
  {
    if (from[i] == value[0])
    {
      int32 j = 0; 
      while (j < value_length && value[j] == from[i+j])
        j++;

      if (j == value_length)
        return &from[i];
    }
  }
  return NULL;
}

int32 Dowa_String_Pos_Find_Char(const char *from, int c, int32 from_len)
{
  if (!from || from_len == 0)
    return -1;

  for (int32 i = 0; i < from_len; i++)
  {
    if ((int)from[i] == c)
      return i;
  }
  return -1;
}

char *Dowa_String_Find_Char(const char *from, int c, int32 from_len)
{
  if (!from || from_len == 0)
    return NULL;

  for (int32 i = 0; i < from_len; i++)
  {
    if ((int)from[i] == c)
      return &from[i];
  }
  return NULL ;
}

// char **Dowa_String_Split(char *from, char *split_token, int32 from_length, int32 split_token_length)
// { 
//   char *current_from = from;
//   int32 moved = 0;
//   while (1)
//   {
//     int32 next_token = Dowa_String_Pos_Find(
//         current_from, split_token, from_length - moved, split_token_length
//     );
// 
//     if (next_token == -1)
//     {
//       break;
//     }
//     char *curr = malloc(sizeof(char) * next_token);
//     while (i < next_token)
//       curr[i++] = from[i];
//   }
// }
