using System;
using System.Linq;
using System.Reflection;
using DotaMatchRequest;
using SteamKit2.GC.Dota.Internal; // for CMsgDOTAMatch

if ( args.Length < 3 )
{
    PrintUsage();
    return;
}

string username = args[ 0 ];
string password = args[ 1 ];

ulong matchId;
if ( !ulong.TryParse( args[ 2 ], out matchId ) )
{
    Console.WriteLine( "Invalid Match ID!" );
    return;
}

DotaClient client = new DotaClient( username, password, matchId );

// connect
client.Connect();

// wait for results of the match request
client.Wait();

// print off what steam gave us
PrintMatchDetails( client.Match );


static void PrintMatchDetails( CMsgDOTAMatch match )
{
    if ( match == null )
    {
        Console.WriteLine( "No match details to display" );
        return;
    }

    // use some lazy reflection to print out details
    var fields = typeof( CMsgDOTAMatch ).GetProperties( BindingFlags.Public | BindingFlags.Instance );

    foreach ( var field in fields.OrderBy( f => f.Name ) )
    {
        var value = field.GetValue( match, null );

        Console.WriteLine( "{0}: {1}", field.Name, value );
    }
}

static void PrintUsage()
{
    Console.WriteLine( "Usage:" );
    Console.WriteLine( "DotaMatchRequest <username> <password> <matchid>" );
}
