/* ====================================================================
 * FTD4Linux Software License, Version 1.0
 *
 * Copyright (c) 2000-2004 The FTD4Linux Development Team.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *        FTD4Linux Development Team (http://www.ftd4linux.2y.net/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "FTD" and "FTD4Linux" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact alguno@ftd4linux.2y.net.
 *
 * 5. Products derived from this software may not be called "FTD4Linux",
 *    nor may "FTD4Linux" appear in their name, without prior written
 *    permission of the FTD4Linux Development Team.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE FTD4LINUX DEVELOPMENT TEAM OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef _FTD_DEFINE_H_
#define _FTD_DEFINE_H_

#define DEBUG_FILE          "debug.log"                 ///< De naam van de debug-file indien er gedebugged wordt.

#define CONFIG_FILE         "openftd.conf"            ///< Naam van de configuratie-file.
#define EVENTS_FILE         "openftd.posts"           ///< Naam van de file met alle events erin.
#define EVENTS_FILE_SQLITE  "openftd.ftddb"           ///< Naam van de file met alle events erin (SQLite variant).
#define FILTERS_FILE        "openftd.filters"         ///< Naam van de file met alle filters erin.
#define GROUPS_FILE         "openftd.groups"          ///< Naam van de file met alle nieuwsgroepen erin.
#define MAIL_FILE           "openftd.mail"            ///< Naam van de file met de opgehaalde FTD-mails erin.

#define HTML_LIST_FILE      "list.html"                 ///< Naam van de file waarin de lijst wordt gegenereerd.
#define HTML_EVENTINFO_FILE "postinfo.html"             ///< Naam van de file waarin de info van een event wordt gegenereerd.
#define HTML_WATCHLIST_FILE "watchlist.html"            ///< Naam van de file waarin de watchlist wordt gegenereerd.
#define HTML_MAIL_FILE      "mail.html"                 ///< Naam van de file waarin het mail-overzicht wordt gegenereerd.
#define HTML_MYFTD_FILE     "myftd.html"                ///< Naam van de file waarin het MyFTD-overzicht wordt gegenereerd.

#define FTD_MSG_TOTALLY_FUCKED_UP \
                                "Terminale uitvoeringsfout. De applicatie wordt nu gestopt."

///#define FTD4LINUX_TEST_DATABASE 1

#ifdef FTD4LINUX_TEST_DATABASE
#define FTD_URL_HOST            "ftd4linux.2y.net"              ///< De testserver voor FTD4linux.
#define FTD_DUMPS_HOST          "ftd4linux.2y.net"              ///< De testserver voor FTD4linux.
#else
#define FTD_URL_HOST            "www.ftd.nu"                    ///< De URL van de FTD server (zonder http:// !) waar updates gehaald worden.
#define FTD_DUMPS_HOST          "static.ftd.nu"                 ///< De URL van de FTD server (zonder http:// !) waar dump-files met de events gehaald worden.
#endif

#define FTD_URL_EVENTS          "/3.7.3/xml.php"
#define FTD_URL_POSTS           "/3.7.3/xml-posts.php"
#define FTD_URL_POSTS_FORUM     "/3.7.3/xml-dyn.php"
#define FTD_URL_GROUPS          "/3.7.3/xml-groups.php"
#define FTD_URL_MAIL            "/3.7.3/xml-mail.php"
#define FTD_URL_SIGNUP          "/3.7.3/xml-signup.php"
#define FTD_URL_FORUM           "/3.7.3/xml-forum.php"
#define FTD_URL_KUDOS           "/3.7.3/xml-kudos.php"
#define FTD_URL_MYFTD           "/3.7.3/xml-myftd.php"
#define FTD_URL_SEND_POST       "/3.7.3/xml-post.php"
#define FTD_URL_FIND_POST       "/3.7.3/xml-findpost.php"
#define FTD_URL_WATCHLIST       "/3.7.3/xml-wlist.php"
#define FTD_URL_MODJE           "/3.7.3/xml-warn.php"
#define FTD_URL_USER            "/3.7.3/xml-user.php"

#define FTD_DUMPS_DIR           "/3.7.3/dumps/"

/* TODO: Ondersteuning voor onderstaande url's maken
#define FTD_URL_IMDB        "/linux_dev/xml-imdb.php"
*/

#define XSLT_TYPE_LIST_EMPTY    ftd_file_parse_data_dir("/list_empty.xsl")
#define XSLT_TYPE_LIST          ftd_file_parse_data_dir("/list.xsl")
#define XSLT_TYPE_LIST_TOTAL    ftd_file_parse_data_dir("/list_total.xsl")
#define XSLT_TYPE_MYFTD         ftd_file_parse_data_dir("/myftd.xsl")
#define XSLT_TYPE_POSTINFO      ftd_file_parse_data_dir("/postinfo.xsl")
#define XSLT_TYPE_WATCHLIST     ftd_file_parse_data_dir("/watchlist.xsl")
#define XSLT_TYPE_MAIL          ftd_file_parse_data_dir("/mail.xsl")

#define XSLT_TYPE_LIST_EMPTY_ALT_FONT   ftd_file_parse_data_dir("/list_empty_no_font_family.xsl")
#define XSLT_TYPE_LIST_ALT_FONT         ftd_file_parse_data_dir("/list_no_font_family.xsl")
#define XSLT_TYPE_LIST_TOTAL_ALT_FONT   ftd_file_parse_data_dir("/list_total_no_font_family.xsl")
#define XSLT_TYPE_MYFTD_ALT_FONT        ftd_file_parse_data_dir("/myftd_no_font_family.xsl")
#define XSLT_TYPE_POSTINFO_ALT_FONT     ftd_file_parse_data_dir("/postinfo_no_font_family.xsl")
#define XSLT_TYPE_WATCHLIST_ALT_FONT    ftd_file_parse_data_dir("/watchlist_no_font_family.xsl")
#define XSLT_TYPE_MAIL_ALT_FONT         ftd_file_parse_data_dir("/mail_no_font_family.xsl")

/**
 * Geeft de status van een event aan.
 */
typedef enum {
    FTDSTATUS_NONE          = -5,   ///< Status onbekend.
    FTDSTATUS_DELETED2      = -3,   ///< Absoluut verwijderd.
    FTDSTATUS_DELETED       = -2,   ///< Verwijderd, maar nog een dagje rondhangend om de verwijdering bekend te maken.
    FTDSTATUS_SPOT          = -1,   ///< Een spot.
    FTDSTATUS_READY         = 0,    ///< Event is volledig gepost.
    FTDSTATUS_ANNOUNCE      = 1,    ///< Event gaat gepost worden.
    FTDSTATUS_UPLOADING     = 2,    ///< Event wordt momenteel gepost.
    FTDSTATUS_UNSUPPORTED   = 3     ///< Niet in gebruik.
} FtdStatus;

/**
 * Geeft de sorteervolgorde van een event-lijst aan.
 */
typedef enum {
    FTDEVENT_SORT_DATUM = 0,        ///< Sorteer op datum.
    FTDEVENT_SORT_TITEL = 1,        ///< Sorteer op titel.
    FTDEVENT_SORT_POSTER = 2,       ///< Sorteer op poster.
    FTDEVENT_SORT_RATING = 3        ///< Sorteer op rating.
} FtdEventSortType;

/**
 * Geeft een fout-status aan.
 */
typedef enum {
    ERROR_NONE,                 ///< Geen probleem.
    ERROR_UNKNOWN,              ///< Onbekende fout.
    ERROR_UNAUTH,               ///< Authorisatie mislukt.
    ERROR_BAN,                  ///< User gebanned.
    ERROR_DB,                   ///< Problemen met database-connectie.
    ERROR_NEW,                  ///< Er zijn geen nieuwe events gevonden.
    ERROR_PLUGIN_UNSUPPORTED,   ///< Plugin systeem niet ondersteund.
    ERROR_PLUGIN_LOCATION,      ///< Locatie van plugin onbekend.
    ERROR_PLUGIN_LOAD,          ///< Probleem met het laden van de plugin.
    ERROR_PLUGIN_EXECUTE,       ///< Probleem met het uitvoeren van de plugin.
    ERROR_RES,                  ///< Onbekende reactie van de server ontvngen.
    ERROR_PARSE,                ///< Probleem met het parsen van de gegevens (of serveroutput).
    ERROR_ORIGEVENT,            ///< Het event kon niet in de lokale cache gevonden worden.
    ERROR_NODATA,               ///< Leeg document gelezen/ontvangen.
    ERROR_DNS,                  ///< Kon geen DNS lookup doen.
    ERROR_DNS_PROXY,            ///< Kon geen DNS lookup doen voor de proxy.
    ERROR_CONNECT,              ///< Kon niet connecten.
    ERROR_READ,                 ///< Probleem met het lezen/ontvangen van data.
    ERROR_SEND,                 ///< Probleem met het schrijven/verzenden van data.
    ERROR_TRANSFER_TIMEOUT,     ///< Transfer timed out.
    ERROR_SIGNUP_E0,            ///< Registreren onmogelijk vanwege ledenstop.
    ERROR_SIGNUP_E1,            ///< Registreren onmogelijk: gebruikersnaam is in gebruik.
    ERROR_SIGNUP_E2,            ///< Registreren onmogelijk vanwege ip-ban.
    ERROR_SIGNUP_E3,            ///< Registreren onmogelijk: er is de laatste 48 uur ingelogd op FTD vanaf dit IP.
    ERROR_CURL_INIT,            ///< Probleem bij de initialisatie van CURL.
    ERROR_POST_CANCELLED,       ///< Post geannuleerd.
    ERROR_POST_MODERATED,       ///< Post geaccepteerd, maar moet nog goedgekeurd.
    ERROR_UPDATE,               ///< FTD versie is te oud.
    ERROR_UPDATE_LIMIT,         ///< De FTD server staat geen update toe binnen een bepaalde tijdslimiet (10 minuten is de meest recente limiet).
    ERROR_MSG,                  ///< Probleem, bericht volgt.
    ERROR_NOT_ON_SERVER,        ///< Post is niet meer aanwezig op de FTD server
    ERROR_MODJE_DUPE_POST,      ///< De gebruiker heeft reeds een melding geplaatst van opgegeven posting
    ERROR_MODJE_DUPE_FORUM,     ///< De gebruiker heeft reeds een melding geplaatst van de opgegeven forum-reactie
    ERROR_NO_SUCH_USER_KNOWN    ///< De opgegeven gebruikersnaam is niet bekend op de FTD server
} FtdErrorCode;

/**
 * Geeft het type van een FTD mail aan.
 */
typedef enum {
    MAIL_TYPE_ONTVANGEN = 1,    ///< Een ontvangen mail.
    MAIL_TYPE_VERZONDEN = 2     ///< Een verzonden mail.
} FtdMailType;

/**
 * Geeft de status van het verzenden van een event aan.
 * Deze states worden gebruikt door ::ftd_post_send bij aanroepen naar diens callback-functie.
 */
typedef enum {
    SEND_STATE_NONE,            ///< Niets te melden.
    SEND_STATE_STARTING,        ///< Verzenden is begonnen.
    SEND_STATE_FASE_1_CONNECT,  ///< Er wordt verbinding gemaakt voor de eerste fase.
    SEND_STATE_FASE_1_DONE,     ///< De eerste fase is verzonden.
    SEND_STATE_FASE_1_ACCEPTED, ///< Het verzenden van de eerste fase was succesvol.
    SEND_STATE_FASE_2_CONNECT,  ///< Er wordt verbinding gemaakt voor de tweede fase.
    SEND_STATE_FASE_2_DONE,     ///< De tweede fase is verzonden.
    SEND_STATE_FASE_2_ACCEPTED, ///< Het verzenden van de tweede fase was succesvol.
    SEND_STATE_FASE_3_CONNECT,  ///< Er wordt verbinding gemaakt voor de derde fase.
    SEND_STATE_FASE_3_DONE,     ///< De derde fase is verzonden.
    SEND_STATE_FASE_3_ACCEPTED, ///< Het verzenden van de derde fase was succesvol.
    SEND_STATE_FASE_4_CONNECT,  ///< Er wordt verbinding gemaakt voor de vierde fase.
    SEND_STATE_FASE_4_DONE,     ///< De vierde fase is verzonden.
    SEND_STATE_FASE_4_ACCEPTED, ///< Het verzenden van de vierde fase was succesvol.
    SEND_STATE_DONE_MODERATED,  ///< De event was aangenomen door de FTD server, maar moet nog goedgekeurd worden door een moderator.
    SEND_STATE_DONE,            ///< De event was aangenomen en goedgekeurd door de FTD server.
    SEND_STATE_ERROR            ///< Er was een probleem tijdens het verzenden.
} FtdSendState;

/**
 * Geeft het bestandstype aan dat gebruikt wordt in een event.
 */
typedef enum {
    FILETYPE_NONE,  ///< Geen bestanden?
    FILETYPE_RAR0,  ///< .rar, .r00, .r01
    FILETYPE_ACE,   ///< .ace, .a01, .a02
    FILETYPE_ZIP,   ///< .**01**.zip, .**02**.zip
    FILETYPE_RAR1,  ///< .001, .002, .003
    FILETYPE_M3U,   ///< De bestanden zijn te vinden bij de mp3-bestanden.
    FILETYPE_RAR2   ///< .part01.rar, .part02.rar, .part03.rar
} FtdFiletype;

/**
 * Omdat XSL het niet leuk vind om XML gegevens tussen &lt;SCRIPT&gt; tags in
 * te planten moeten we via een ranzige omweg een XML tag creeeren welke
 * alle Javascript code bevat. Dit stuk Javascript is nodig voor de Watchlist.
 */
#define RANZIGE_JAVASCRIPT_POSTLIST "\t\t<WatchlistJS><![CDATA[<SCRIPT>\n"\
"if (document.images)\n"\
"{\n"\
"        PL1 = new Image(); PL1.src = \"file://%s/images/ptr1.gif\";\n"\
"        PL2 = new Image(); PL2.src = \"file://%s/images/ptr2.gif\";\n"\
"}\n"\
"\n"\
"function ptr(mode,position)\n"\
"{\n"\
"        if (mode == 0) document[position].src = PL1.src;\n"\
"        if (mode == 1) document[position].src = PL2.src;\n"\
"}\n"\
"\n"\
"function dllist(mode,cat,imgsource)\n"\
"{\n"\
"        src = document['p'+imgsource].src;\n"\
"        i = src.length-6;\n"\
"        src = src.charAt( i );\n"\
"        if( src == '1' || src == '3' ) {\n"\
"           toggle = 0;\n"\
"        }\n"\
"        else {\n"\
"           toggle = 1;\n"\
"        }\n"\
"        if (mode == 0) {\n"\
"            if( toggle == 0 ) {\n"\
"                 document['p'+imgsource].src = 'file://%s/images/dlb3'+cat+'.bmp';\n"\
"            }\n"\
"            else {\n"\
"                 document['p'+imgsource].src = 'file://%s/images/dlb4'+cat+'.bmp';\n"\
"            }\n"\
"       }\n"\
"        if (mode == 1) {\n"\
"            if (toggle == 0)\n"\
"            {\n"\
"                document['p'+imgsource].src = 'file://%s/images/dlb1'+cat+'.bmp';\n"\
"            } else {\n"\
"                document['p'+imgsource].src = 'file://%s/images/dlb2'+cat+'.bmp';\n"\
"            }\n"\
"        }\n"\
"        if (mode == 2) {\n"\
"            if (toggle == 0) {\n"\
"                document['p'+imgsource].src = 'file://%s/images/dlb2'+cat+'.bmp';\n"\
"            } else {\n"\
"                document['p'+imgsource].src = 'file://%s/images/dlb1'+cat+'.bmp';\n"\
"            }\n"\
"        }\n"\
"}</SCRIPT>]]></WatchlistJS>\n"

/**
 * Omdat XSL het niet leuk vind om XML gegevens tussen &lt;SCRIPT&gt; tags in
 * te planten moeten we via een ranzige omweg een XML tag creeeren welke
 * alle Javascript code bevat. Dit stuk Javascript is nodig voor de postinfo.
 */
#define RANZIGE_JAVASCRIPT_POSTINFO \
"<WatchlistJSPostinfo><![CDATA[<SCRIPT>\n" \
"function dllist(mode)\n" \
"{\n" \
"\tsrc = document['dlbut'].src;\n" \
"\ti = src.length-5;\n" \
"\tsrc = src.charAt( i );\n" \
"\tif( src == '3' || src == '4' ) {\n" \
"\t\ttoggle = 1;\n" \
"\t}\n" \
"\telse {\n" \
"\t\ttoggle = 0;\n" \
"\t}\n" \
"\tif (mode == 0) {\n" \
"\tif (toggle == 1)\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-4.bmp'; }\n" \
"\t\telse\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-2.bmp'; }\n" \
"\t}\n" \
"\tif (mode == 1) {\n" \
"\tif (toggle == 1)\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-3.bmp'; }\n" \
"\t\telse\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-1.bmp'; }\n" \
"\t}\n" \
"\tif (mode == 2) {\n" \
"\tif (toggle == 1)\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-1.bmp'; }\n" \
"\t\telse\n" \
"\t{ document['dlbut'].src = 'file://%s/images/b4-3.bmp'; }\n" \
"\t}\n" \
"}\n" \
"</SCRIPT>]]></WatchlistJSPostinfo>\n"

/* wordt gebruikt voor het verwijderen van postings ouder dan X dagen */
#define DUUR_DAG        86400
#define CACHE_OPTIE1    "7"     ///< Events maar 7 dagen bewaren.
#define CACHE_OPTIE2    "14"    ///< Events maar 14 dagen bewaren.
#define CACHE_OPTIE3    "21"    ///< Events maar 21 dagen bewaren.
#define CACHE_OPTIE4    "28"    ///< Events maar 28 dagen bewaren.
#define CACHE_OPTIE5    "35"    ///< Events maar 35 dagen bewaren.
#define CACHE_OPTIE6    "42"    ///< Events maar 42 dagen bewaren.
#define CACHE_OPTIE7    "50"    ///< Events maar 50 dagen bewaren.
#define CACHE_OPTIE8    "75"    ///< Events maar 75 dagen bewaren.
#define CACHE_OPTIE9    "100"    ///< Events maar 100 dagen bewaren.
#define CACHE_OPTIE10   "125"    ///< Events maar 125 dagen bewaren.

#include "win32crap.h"

#endif /* _FTD_DEFINE_H_ */
