#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "fluidss.h"

/* #define QUERY "crime and punishment" */
#define QUERY "пр*"

#define EBUFSIZE 4096

void myPrintError( struct flu_searcher_t *fs, unsigned zint_t errorCode, const char *name)
{
  const char *errorString = fluSearcherErrorString( fs, errorCode, name);
  strncpy( (char *) fs->info, errorString, EBUFSIZE);
  ((char *) fs->info)[EBUFSIZE-1] = '\0';
}

void main( void )
{
  struct flu_searcher_t searcher;
  const char *indexFile = "index.flu";
  struct flu_searcher_result_t *result;
  char buf[EBUFSIZE];

  fluInit();

/* Подготавливаем поиск */
  if( !fluSearcherInit(             /* Инициализация... */
         &searcher,                    /* поисковик */
         myPrintError,                 /* ошибки запоминаем в buf */
         NULL,                         /* считаем, что памяти много */
         buf                           /* дополнительная информация */
       ) ||
      !fluSearcherSetParams(        /* Параметры поиска... */
         &searcher,                    /* поисковик */
         FS_AREA_CONTENT | FS_AREA_TITLE, /* область поиска */
         0,                            /* флаги поиска */
         20,                           /* пропустить первых 20 результатов */
         10                            /* запомнить следующие 10 результатов */
       ) ||
      !fluSearcherSetQuery(         /* Установим запрос */
         &searcher,                    /* поисковик */
         QUERY                         /* собственно запрос */
       ) )
  {
    fluSearcherFree( &searcher );
    fprintf( stderr, "Ошибка инициализации поисковика.\n%s\n", buf);
    exit( -1 );
  }

/* Осуществляем поиск */
  if( !fluSearcherMakeSearch(       /* Поиск */
         &searcher,                    /* поисковик */
         1,                            /* ищем в одном индексном файле */
         &indexFile,                   /* список файловых имен индексов */
         NULL,                         /* список псевдонимов индексных файлов */
         NULL                          /* дополнительная информация для каждого индекса */
       ) )
  {
    fluSearcherFree( &searcher );
    fprintf( stderr, "Ошибка проведения поиска.\n%s\n", buf);
    exit( 1 );
  }

/* Печатаем результаты */
  printf( "На запрос '%s' получены следующие результаты с номерами 21...30:\n", QUERY);
  fluSearcherInitResult( &searcher, fsfShortForm); /* Нас интересует только URL */
  while( (result = fluSearcherNextResult( &searcher )) != NULL )
    printf( "%d: %s\n", result->number+1, result->wasError ? "???" : result->url);

/* Высвобождаем память и закрываем файлы */
  fluSearcherFree( &searcher );

/* Все! */
  exit( 0 );
}
