<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dt="http://xsltsl.org/date-time">
    <xsl:import href="airprox-lib.xsl"/>
    <xsl:output method="text" encoding="UTF-8"/>
    <xsl:param name="rotation-output" select="'note'"/>
    <!-- note event many-days-event timed-many-days-event -->
    <xsl:variable name="owner" select="logbook/@pntafid"/>
    <!-- Main Loop -->
    <xsl:template match="/">
        <xsl:call-template name="init-calendar"/>
        <xsl:for-each select="/logbook/activity">
            <xsl:call-template name="output"/>
        </xsl:for-each>
        <xsl:call-template name="close-calendar"/>
    </xsl:template>
    <!-- Sortie par type d'activité, à personnaliser -->
    <xsl:template name="output">
        <xsl:choose>
            <!-- Activité = Rotation -->
            <xsl:when test="@type='trip'">
                <!-- Variable contenant la liste des escales à comptabiliser en frais réels -->
                <xsl:variable name="impots">
                    <!--ex: BOD/TLS/LYS-->
                    <xsl:for-each select="summary/tax-package">
                        <xsl:value-of select="@airport"/>
                        <xsl:if test="position() &lt; last()">
                            <!-- ne pas terminer par un slash-->
                            <xsl:value-of select="'/'"/>
                        </xsl:if>
                    </xsl:for-each>
                </xsl:variable>
                <xsl:if test="$rotation-output='event'">
                    <!-- sortie d'un evenement par jour de rotation ? -->
                    <xsl:call-template name="day-output">
                        <xsl:with-param name="summary" select="@id"/>
                        <xsl:with-param name="period" select="summary/@period"/>
                        <xsl:with-param name="repeat" select="summary/@dayson"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:if test="$rotation-output='many-days-event'">
                    <!-- sortie d'un evenement sans heure sur plusieurs jour ? -->
                    <xsl:call-template name="many-days-output">
                        <xsl:with-param name="summary" select="@id"/>
                        <xsl:with-param name="period" select="summary/@period"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:if test="$rotation-output='timed-many-days-event'">
                    <!-- sortie d'un evenement sans heure sur plusieurs jour ? -->
                    <xsl:call-template name="many-days-output">
                        <xsl:with-param name="summary" select="@id"/>
                        <xsl:with-param name="period" select="summary/@period"/>
                        <xsl:with-param name="repeat" select="-1"/>
                    </xsl:call-template>
                </xsl:if>
                <!-- Variable contenant la description ajouté à la première étape d'une rotation -->
                <xsl:variable name="rotation">
                    <xsl:if test="$rotation-output='note'">
                        <xsl:value-of select="@id"/>
                    </xsl:if>
                </xsl:variable>
                <xsl:variable name="trip_summary">
                    <xsl:text>SH1=</xsl:text>
                    <xsl:value-of select="summary/h1[@type='remuneration']"/>
                    <xsl:value-of select="$eol"/>
                    <xsl:text>Hca=</xsl:text>
                    <xsl:value-of select="summary/hca"/>
                    <xsl:value-of select="$eol"/>
                    <xsl:text> H2=</xsl:text>
                    <xsl:value-of select="summary/h2[@type='remuneration']"/>
                    <xsl:value-of select="$eol"/>
                    <xsl:text>Impots:</xsl:text>
                    <xsl:value-of select="$impots"/>
                </xsl:variable>
                <xsl:for-each select="duty">
                    <!--Descriptif du TSV-->
                    <xsl:variable name="tsv_summary">
                        <xsl:text>TSV=</xsl:text>
                        <xsl:value-of select="substring-after(@period,'/PT')"/>
                        <xsl:value-of select="$eol"/>
                        <xsl:text>CMT=</xsl:text>
                        <xsl:value-of select="summary/cmt"/>
                        <xsl:value-of select="$eol"/>
                        <xsl:text>MEP=</xsl:text>
                        <xsl:value-of select="summary/mep"/>
                        <xsl:value-of select="$eol"/>
                        <xsl:text> H1=</xsl:text>
                        <xsl:value-of select="summary/h1[@type='remuneration']"/>
                        <xsl:value-of select="$eol"/>
                        <xsl:text>Hcv=</xsl:text>
                        <xsl:value-of select="summary/hcv[@type='remuneration']"/>
                        <xsl:value-of select="$eol"/>
                        <xsl:text>Hct=</xsl:text>
                        <xsl:value-of select="summary/hct"/>
                    </xsl:variable>
                    <!--Variables utilisées pour déterminer découcher ou fin de rotation-->
                    <xsl:variable name="dernier_tsv" select="last()"/>
                    <xsl:variable name="tsv_courant" select="position()"/>
                    <!--La boucle commence ici, on analyse chaque activité de la rotation-->
                    <xsl:for-each select="activity">
                        <!-- Liste équipage de l'étape -->
                        <xsl:variable name="crew">
                            <xsl:for-each select="crew/pnt">
                                <xsl:if test="$owner!=@pntafid">
                                    <!--permet d'exclure son propre nom de la liste equipage-->
                                    <xsl:value-of select="fonction"/>
                                    <xsl:text>: </xsl:text>
                                    <xsl:value-of select="concat(prenom,' ',nom)"/>
                                    <xsl:text> (</xsl:text>
                                    <xsl:value-of select="affectation"/>
                                    <xsl:text>)</xsl:text>
                                </xsl:if>
                            </xsl:for-each>
                        </xsl:variable>
                        <xsl:variable name="fuseau">
                            <xsl:value-of select="to/airport/@id"/>
                            <xsl:text> : GMT </xsl:text>
                            <xsl:value-of select="substring(to/datetime[@fuseau='local'],17)"/>
                        </xsl:variable>
                        <xsl:choose>
                            <xsl:when test="$tsv_courant=1 and position()=1">
                                <!--debut rotation-->
                                <xsl:call-template name="flight-output">
                                    <xsl:with-param name="note" select="concat($rotation,$eol,$crew,$eol,$fuseau,$eol,$trip_summary,$eol,$tsv_summary)"/>
                                </xsl:call-template>
                            </xsl:when>
                            <xsl:when test="position()=1">
                                <!--debut de tsv-->
                                <xsl:call-template name="flight-output">
                                    <xsl:with-param name="note" select="concat($rotation,$eol,$crew,$eol,$fuseau,$eol,$tsv_summary)"/>
                                </xsl:call-template>
                            </xsl:when>
                            <xsl:when test="$dernier_tsv=$tsv_courant and position()=last()">
                                <!--fin de rotation-->
                                <xsl:call-template name="flight-output">
                                    <xsl:with-param name="note" select="concat($rotation,$eol,$crew,$eol,$fuseau)"/>
                                </xsl:call-template>
                            </xsl:when>
                            <xsl:when test="position()=last()">
                                <!-- Découcher en escale-->
                                <xsl:call-template name="flight-output">
                                    <xsl:with-param name="note">
                                        <xsl:value-of select="concat($rotation,$eol,$crew,$eol,$fuseau,$eol)"/>
                                        <xsl:text>IR </xsl:text>
                                        <xsl:value-of select="to/airport/city"/>
                                        <xsl:text> =</xsl:text>
                                        <xsl:value-of select="to/airport/ir"/>
                                        <xsl:value-of select="to/airport/ir/@name"/>
                                        <xsl:value-of select="$eol"/>
                                        <xsl:text>MF </xsl:text>
                                        <xsl:value-of select="to/airport/city"/>
                                        <xsl:text> =</xsl:text>
                                        <xsl:value-of select="to/airport/mf"/>
                                        <xsl:value-of select="to/airport/mf/@name"/>
                                        <xsl:value-of select="$eol"/>
                                    </xsl:with-param>
                                </xsl:call-template>
                            </xsl:when>
                            <xsl:otherwise>
                                <!--escale intermediaire-->
                                <xsl:call-template name="flight-output">
                                    <xsl:with-param name="note" select="concat($rotation,$eol,$crew,$eol,$fuseau)"/>
                                </xsl:call-template>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:for-each>
                </xsl:for-each>
            </xsl:when>
            <!-- Activité Sol -->
            <xsl:when test="@type='ground'">
                <xsl:if test="$rotation-output!='note'">
                    <!-- par cohérence on ajoute un événement sans heure pour chaque journée sol ? -->
                    <xsl:call-template name="day-output">
                        <xsl:with-param name="summary" select="'Sol'"/>
                        <xsl:with-param name="period" select="@period"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:call-template name="ground-output"/>
            </xsl:when>
            <!-- Activité Sol autre -->
            <xsl:when test="@type='empty' or @type='off' or @type='holiday'">
                <xsl:call-template name="day-output">
                    <xsl:with-param name="summary">
                        <xsl:choose>
                            <xsl:when test="name='REPOS'">
                                <xsl:text>Repos</xsl:text>
                            </xsl:when>
                            <xsl:when test="name='CONGES'">
                                <xsl:text>Congés</xsl:text>
                            </xsl:when>
                            <xsl:when test="name='DISP.'">
                                <xsl:text>Dispersion</xsl:text>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:value-of select="name"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            <!-- Activité inconnue -->
            <xsl:otherwise>
                <xsl:call-template name="error-output">
                    <xsl:with-param name="type" select="@type"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!--Sortie des activités vols -->
    <xsl:template name="flight-output">
        <xsl:param name="note"/>
        <!-- Ajout d'un événement -->
        <xsl:call-template name="calendar-event">
            <!-- Heure début -->
            <xsl:with-param name="start">
                <xsl:call-template name="datetime2timezone">
                    <xsl:with-param name="datetime" select="from/datetime"/>
                </xsl:call-template>
            </xsl:with-param>
            <!-- Heure fin -->
            <xsl:with-param name="end">
                <xsl:call-template name="datetime2timezone">
                    <xsl:with-param name="datetime" select="to/datetime"/>
                </xsl:call-template>
            </xsl:with-param>
            <!-- Description courte -->
            <xsl:with-param name="summary">
                <xsl:value-of select="concat(from/airport/@id,'-',to/airport/@id,' ',@id)"/>
                <xsl:if test="@type='mep'"> MEP</xsl:if>
            </xsl:with-param>
            <xsl:with-param name="note" select="concat($note-prepend,$note)"/>
        </xsl:call-template>
    </xsl:template>
    <!--Sortie des activités au sol -->
    <xsl:template name="ground-output">
        <xsl:param name="note" select="''"/>
        <xsl:param name="summary" select="name"/>
        <!-- Ajout d'un événement -->
        <xsl:call-template name="calendar-event">
            <!-- Heure début -->
            <xsl:with-param name="start">
                <xsl:choose>
                    <xsl:when test="$timezone='paris' or $timezone='local'">
                        <xsl:value-of select="substring-before(@period,'/')"/>
                    </xsl:when>
                    <xsl:when test="$timezone='gmt' or $timezone='isogmt'">
                        <xsl:call-template name="isodate2gmt">
                            <xsl:with-param name="isodate" select="substring-before(@period,'/')"/>
                        </xsl:call-template>
                    </xsl:when>
                </xsl:choose>
            </xsl:with-param>
            <!-- Heure fin -->
            <xsl:with-param name="end">
                <xsl:choose>
                    <xsl:when test="$timezone='paris' or $timezone='local'">
                        <xsl:value-of select="substring-after(@period,'/')"/>
                    </xsl:when>
                    <xsl:when test="$timezone='gmt' or $timezone='isogmt'">
                        <xsl:call-template name="isodate2gmt">
                            <xsl:with-param name="isodate" select="substring-after(@period,'/')"/>
                        </xsl:call-template>
                    </xsl:when>
                </xsl:choose>
            </xsl:with-param>
            <!-- Description courte -->
            <xsl:with-param name="summary" select="$summary"/>
            <!-- Commentaire (note) -->
            <xsl:with-param name="note" select="concat($note-prepend,$note)"/>
        </xsl:call-template>
    </xsl:template>
    <!--Sortie des activités sans heure -->
    <xsl:template name="day-output">
        <xsl:param name="note" select="''"/>
        <xsl:param name="summary" select="name"/>
        <xsl:param name="repeat" select="1"/>
        <xsl:param name="period" select="@period"/>
        <!-- Ajout d'un événement -->
        <!-- Heure de début = 00:00+0x:00-->
        <xsl:variable name="datetime" select="substring-before($period,'/')"/>
        <xsl:variable name="thestart">
            <xsl:choose>
                <xsl:when test="$timezone='paris' or $timezone='local'">
                    <xsl:value-of select="concat(substring-before($datetime,'T'),'T00:00',substring(substring-after($datetime,':'),3))"/>
                </xsl:when>
                <xsl:when test="$timezone='gmt' or $timezone='isogmt'">
                    <xsl:call-template name="isodate2gmt">
                        <xsl:with-param name="isodate" select="concat(substring-before($datetime,'T'),'T00:00',substring(substring-after($datetime,':'),3))"/>
                    </xsl:call-template>
                </xsl:when>
            </xsl:choose>
        </xsl:variable>
        <!-- Heure de fin = debut + 1 jour -->
        <xsl:variable name="theend">
            <xsl:call-template name="datetime-add">
                <xsl:with-param name="datetime1" select="$thestart"/>
                <xsl:with-param name="datetime2" select="'T24:00'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:call-template name="calendar-event">
            <!-- Heure début -->
            <xsl:with-param name="start" select="$thestart"/>
            <!-- Heure fin -->
            <xsl:with-param name="end" select="$theend"/>
            <!-- Description courte -->
            <xsl:with-param name="summary" select="$summary"/>
            <!-- Commentaire (note) -->
            <xsl:with-param name="note" select="concat($note-prepend,$note)"/>
            <!-- Repetition éventuelle -->
            <xsl:with-param name="repeat" select="$repeat"/>
            <!-- Période associée -->
            <xsl:with-param name="period" select="$period"/>
        </xsl:call-template>
    </xsl:template>
    <!--Sortie des activités sans heure sur plusieurs jours-->
    <xsl:template name="many-days-output">
        <xsl:param name="note" select="''"/>
        <xsl:param name="summary" select="name"/>
        <xsl:param name="period" select="@period"/>
        <xsl:param name="repeat" select="0"/>
        <xsl:call-template name="calendar-event">
            <!-- Description courte -->
            <xsl:with-param name="summary" select="$summary"/>
            <!-- Commentaire (note) -->
            <xsl:with-param name="note" select="concat($note-prepend,$note)"/>
            <!-- Repetition éventuelle -->
            <xsl:with-param name="repeat" select="$repeat"/>
            <!-- Période associée -->
            <xsl:with-param name="period" select="$period"/>
        </xsl:call-template>
    </xsl:template>
    <!--Traitement des activités non traitées par ailleurs-->
    <xsl:template name="error-output">
        <xsl:param name="type"/>
        <xsl:message>Activité de type <xsl:value-of select="$type"/> non traitée</xsl:message>
    </xsl:template>
    <!-- Create a vCalendar or iCalendar (global variable format)-->
    <xsl:template name="init-calendar">
        <xsl:param name="format" select="$format"/>
        <xsl:param name="events"/>
        <xsl:text>BEGIN:VCALENDAR</xsl:text>
        <xsl:value-of select="$eol"/>
        <xsl:text>PRODID:AirProx </xsl:text>
        <xsl:value-of select="$format"/>
        <xsl:text> for </xsl:text>
        <xsl:value-of select="$owner"/>
        <xsl:value-of select="$eol"/>
        <xsl:choose>
            <xsl:when test="$format='vcalendar'">
                <xsl:text>VERSION:1.0</xsl:text>
                <xsl:value-of select="$eol"/>
            </xsl:when>
            <xsl:when test="$format='icalendar'">
                <xsl:text>VERSION:2.0</xsl:text>
                <xsl:value-of select="$eol"/>
                <xsl:text>METHOD:PUBLISH</xsl:text>
                <xsl:value-of select="$eol"/>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
    <xsl:template name="close-calendar">
        <xsl:text>END:VCALENDAR</xsl:text>
        <xsl:value-of select="$eol"/>
    </xsl:template>
</xsl:stylesheet>

