#include "DisplayCommon.h"
#include "DisplayAnimation.h"
#if defined (FBXSDK_ENV_MAC)
#pragma GCC diagnostic ignored "-Wformat-security"
#endif
{
    int i;
    {
        FbxString lOutputString = 
"Animation Stack Name: ";
 
        lOutputString += lAnimStack->
GetName();
 
        lOutputString += "\n\n";
        FBXSDK_printf(lOutputString);
        DisplayAnimation(lAnimStack, pScene->
GetRootNode(), 
true);
 
    }
}
{
    int l;
    lOutputString = "Animation stack contains ";
    lOutputString += nbAnimLayers;
    lOutputString += " Animation Layer(s)\n";
    FBXSDK_printf(lOutputString);
    for (l = 0; l < nbAnimLayers; l++)
    {
        lOutputString = "AnimLayer ";
        lOutputString += l;
        lOutputString += "\n";
        FBXSDK_printf(lOutputString);
        DisplayAnimation(lAnimLayer, pNode, isSwitcher);
    }
}
{
    int lModelCount;
    lOutputString = "     Node Name: ";
    lOutputString += "\n\n";
    FBXSDK_printf(lOutputString);
    DisplayChannels(pNode, pAnimLayer, DisplayCurveKeys, DisplayListCurveKeys, isSwitcher);
    FBXSDK_printf ("\n");
    for(lModelCount = 0; lModelCount < pNode->
GetChildCount(); lModelCount++)
 
    {
        DisplayAnimation(pAnimLayer, pNode->
GetChild(lModelCount), isSwitcher);
 
    }
}
{
    
    if (!isSwitcher)
    {
        if (lAnimCurve)
        {
            FBXSDK_printf("        TX\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        TY\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        TZ\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        RX\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        RY\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        RZ\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        SX\n");
            DisplayCurve(lAnimCurve);
        }    
        if (lAnimCurve)
        {
            FBXSDK_printf("        SY\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        SZ\n");
            DisplayCurve(lAnimCurve);
        }
    }
    
    if (lNodeAttribute)
    {
        if (lAnimCurve)
        {
            FBXSDK_printf("        Red\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        Green\n");
            DisplayCurve(lAnimCurve);
        }
        if (lAnimCurve)
        {
            FBXSDK_printf("        Blue\n");
            DisplayCurve(lAnimCurve);
        }
        
        if (light)
        {
            if (lAnimCurve)
            {
                FBXSDK_printf("        Intensity\n");
                DisplayCurve(lAnimCurve);
            }
            if (lAnimCurve)
            {
                FBXSDK_printf("        Outer Angle\n");
                DisplayCurve(lAnimCurve);
            }
            if (lAnimCurve)
            {
                FBXSDK_printf("        Fog\n");
                DisplayCurve(lAnimCurve);
            }
        }
        
        if (camera)
        {
            if (lAnimCurve)
            {
                FBXSDK_printf("        Field of View\n");
                DisplayCurve(lAnimCurve);
            }
            if (lAnimCurve)
            {
                FBXSDK_printf("        Field of View X\n");
                DisplayCurve(lAnimCurve);
            }
            if (lAnimCurve)
            {
                FBXSDK_printf("        Field of View Y\n");
                DisplayCurve(lAnimCurve);
            }
            if (lAnimCurve)
            {
                FBXSDK_printf("        Optical Center X\n");
                DisplayCurve(lAnimCurve);
            }
            if(lAnimCurve)
            {
                FBXSDK_printf("        Optical Center Y\n");
                DisplayCurve(lAnimCurve);
            }
            if(lAnimCurve)
            {
                FBXSDK_printf("        Roll\n");
                DisplayCurve(lAnimCurve);
            }
        }
        
        {
            for(int lBlendShapeIndex = 0; lBlendShapeIndex<lBlendShapeDeformerCount; ++lBlendShapeIndex)
            {
                for(int lChannelIndex = 0; lChannelIndex<lBlendShapeChannelCount; ++lChannelIndex)
                {
                    const char* lChannelName = lChannel->
GetName();
 
                    lAnimCurve = lGeometry->
GetShapeChannel(lBlendShapeIndex, lChannelIndex, pAnimLayer, 
true);
 
                    if(lAnimCurve)
                    {
                        FBXSDK_printf("        Shape %s\n", lChannelName);
                        DisplayCurve(lAnimCurve);
                    }
                }
            }
        }
    }
    
    {
        {
            if (!lCurveNode){
                continue;
            }
            {
                lMessage =  "        Property ";
                {
                    lMessage += " (Label: ";
                    lMessage += ")";
                };
                DisplayString(lMessage.
Buffer());
 
                {
                    lAnimCurve = lCurveNode->
GetCurve(0U, c);
 
                    if (lAnimCurve)
                        DisplayCurve(lAnimCurve);
                }
            }
            {
                
                lMessage =  "        Property ";
                {
                    lMessage += " (Label: ";
                    lMessage += ")";
                }
                DisplayString(lMessage.
Buffer());
 
                {
                    lAnimCurve = lCurveNode->
GetCurve(0U, c);
 
                    if (lAnimCurve)
                    {
                        DisplayString("        Component ", lComponentName1);
                        DisplayCurve(lAnimCurve);
                    }
                }
                {
                    lAnimCurve = lCurveNode->
GetCurve(1U, c);
 
                    if (lAnimCurve)
                    {
                        DisplayString("        Component ", lComponentName2);
                        DisplayCurve(lAnimCurve);
                    }
                }
                {
                    lAnimCurve = lCurveNode->
GetCurve(2U, c);
 
                    if (lAnimCurve)
                    {
                        DisplayString("        Component ", lComponentName3);
                        DisplayCurve(lAnimCurve);
                    }
                }
            }
            {
                lMessage =  "        Property ";
                {
                    lMessage += " (Label: ";
                    lMessage += ")";
                };
                DisplayString(lMessage.
Buffer());
 
                {
                    lAnimCurve = lCurveNode->
GetCurve(0U, c);
 
                    if (lAnimCurve)
                        DisplayListCurve(lAnimCurve, &lProperty);
                }                
            }
        }
    } 
}
static int InterpolationFlagToIndex(int flags)
{
    return 0;
}
static int ConstantmodeFlagToIndex(int flags)
{
    return 0;
}
static int TangentmodeFlagToIndex(int flags)
{
    return 0;
}
static int TangentweightFlagToIndex(int flags)
{
    return 0;
}
static int TangentVelocityFlagToIndex(int flags)
{
    return 0;
}
{
    static const char* interpolation[] = { "?", "constant", "linear", "cubic"};
    static const char* constantMode[] =  { "?", "Standard", "Next" };
    static const char* cubicMode[] =     { "?", "Auto", "Auto break", "Tcb", "User", "Break", "User break" };
    static const char* tangentWVMode[] = { "?", "None", "Right", "Next left" };
    float   lKeyValue;
    char    lTimeString[256];
    int     lCount;
    for(lCount = 0; lCount < lKeyCount; lCount++)
    {
        lKeyValue = 
static_cast<float>(pCurve->
KeyGetValue(lCount));
 
        lOutputString = "            Key Time: ";
        lOutputString += ".... Key Value: ";
        lOutputString += lKeyValue;
        lOutputString += " [ ";
        lOutputString += interpolation[ InterpolationFlagToIndex(pCurve->
KeyGetInterpolation(lCount)) ];
 
        {
            lOutputString += " | ";
            lOutputString += constantMode[ ConstantmodeFlagToIndex(pCurve->
KeyGetConstantMode(lCount)) ];
 
        }
        {
            lOutputString += " | ";
            lOutputString += cubicMode[ TangentmodeFlagToIndex(pCurve->
KeyGetTangentMode(lCount)) ];
 
            lOutputString += " | ";
            lOutputString += " | ";
        }
        lOutputString += " ]";
        lOutputString += "\n";
        FBXSDK_printf (lOutputString);
    }
}
{
    int     lKeyValue;
    char    lTimeString[256];
    int     lCount;
    for(lCount = 0; lCount < lKeyCount; lCount++)
    {
        lKeyValue = 
static_cast<int>(pCurve->
KeyGetValue(lCount));
 
        lOutputString = "            Key Time: ";
        lOutputString += ".... Key Value: ";
        lOutputString += lKeyValue;
        lOutputString += " (";
        lOutputString += ")";
        lOutputString += "\n";
        FBXSDK_printf (lOutputString);
    }
}