package net.minecraft.stats;
import argo.jdom.JdomParser;
import argo.jdom.JsonNode;
import argo.jdom.JsonRootNode;
import argo.jdom.JsonStringNode;
import argo.saj.InvalidSyntaxException;
import cpw.mods.fml.common.asm.ReobfuscationMarker;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.minecraft.util.MD5String;
import net.minecraft.util.Session;
@ReobfuscationMarker
@SideOnly(Side.CLIENT)
public class StatFileWriter
{
private Map field_77457_a = new HashMap();
private Map field_77455_b = new HashMap();
private boolean field_77456_c = false;
private StatsSyncher statsSyncher;
public StatFileWriter(Session par1Session, File par2File)
{
File var3 = new File(par2File, "stats");
if (!var3.exists())
{
var3.mkdir();
}
File[] var4 = par2File.listFiles();
int var5 = var4.length;
for (int var6 = 0; var6 < var5; ++var6)
{
File var7 = var4[var6];
if (var7.getName().startsWith("stats_") && var7.getName().endsWith(".dat"))
{
File var8 = new File(var3, var7.getName());
if (!var8.exists())
{
System.out.println("Relocating " + var7.getName());
var7.renameTo(var8);
}
}
}
this.statsSyncher = new StatsSyncher(par1Session, this, var3);
}
public void readStat(StatBase par1StatBase, int par2)
{
this.writeStatToMap(this.field_77455_b, par1StatBase, par2);
this.writeStatToMap(this.field_77457_a, par1StatBase, par2);
this.field_77456_c = true;
}
private void writeStatToMap(Map par1Map, StatBase par2StatBase, int par3)
{
Integer var4 = (Integer)par1Map.get(par2StatBase);
int var5 = var4 == null ? 0 : var4.intValue();
par1Map.put(par2StatBase, Integer.valueOf(var5 + par3));
}
public Map func_77445_b()
{
return new HashMap(this.field_77455_b);
}
/**
* write a whole Map of stats to the statmap
*/
public void writeStats(Map par1Map)
{
if (par1Map != null)
{
this.field_77456_c = true;
Iterator var2 = par1Map.keySet().iterator();
while (var2.hasNext())
{
StatBase var3 = (StatBase)var2.next();
this.writeStatToMap(this.field_77455_b, var3, ((Integer)par1Map.get(var3)).intValue());
this.writeStatToMap(this.field_77457_a, var3, ((Integer)par1Map.get(var3)).intValue());
}
}
}
public void func_77452_b(Map par1Map)
{
if (par1Map != null)
{
Iterator var2 = par1Map.keySet().iterator();
while (var2.hasNext())
{
StatBase var3 = (StatBase)var2.next();
Integer var4 = (Integer)this.field_77455_b.get(var3);
int var5 = var4 == null ? 0 : var4.intValue();
this.field_77457_a.put(var3, Integer.valueOf(((Integer)par1Map.get(var3)).intValue() + var5));
}
}
}
public void func_77448_c(Map par1Map)
{
if (par1Map != null)
{
this.field_77456_c = true;
Iterator var2 = par1Map.keySet().iterator();
while (var2.hasNext())
{
StatBase var3 = (StatBase)var2.next();
this.writeStatToMap(this.field_77455_b, var3, ((Integer)par1Map.get(var3)).intValue());
}
}
}
public static Map func_77453_b(String par0Str)
{
HashMap var1 = new HashMap();
try
{
String var2 = "local";
StringBuilder var3 = new StringBuilder();
JsonRootNode var4 = (new JdomParser()).parse(par0Str);
List var5 = var4.getArrayNode(new Object[] {"stats-change"});
Iterator var6 = var5.iterator();
while (var6.hasNext())
{
JsonNode var7 = (JsonNode)var6.next();
Map var8 = var7.getFields();
Entry var9 = (Entry)var8.entrySet().iterator().next();
int var10 = Integer.parseInt(((JsonStringNode)var9.getKey()).getText());
int var11 = Integer.parseInt(((JsonNode)var9.getValue()).getText());
StatBase var12 = StatList.getOneShotStat(var10);
if (var12 == null)
{
System.out.println(var10 + " is not a valid stat");
}
else
{
var3.append(StatList.getOneShotStat(var10).statGuid).append(",");
var3.append(var11).append(",");
var1.put(var12, Integer.valueOf(var11));
}
}
MD5String var14 = new MD5String(var2);
String var15 = var14.getMD5String(var3.toString());
if (!var15.equals(var4.getStringValue(new Object[] {"checksum"})))
{
System.out.println("CHECKSUM MISMATCH");
return null;
}
}
catch (InvalidSyntaxException var13)
{
var13.printStackTrace();
}
return var1;
}
public static String func_77441_a(String par0Str, String par1Str, Map par2Map)
{
StringBuilder var3 = new StringBuilder();
StringBuilder var4 = new StringBuilder();
boolean var5 = true;
var3.append("{\r\n");
if (par0Str != null && par1Str != null)
{
var3.append(" \"user\":{\r\n");
var3.append(" \"name\":\"").append(par0Str).append("\",\r\n");
var3.append(" \"sessionid\":\"").append(par1Str).append("\"\r\n");
var3.append(" },\r\n");
}
var3.append(" \"stats-change\":[");
Iterator var6 = par2Map.keySet().iterator();
while (var6.hasNext())
{
StatBase var7 = (StatBase)var6.next();
if (var5)
{
var5 = false;
}
else
{
var3.append("},");
}
var3.append("\r\n {\"").append(var7.statId).append("\":").append(par2Map.get(var7));
var4.append(var7.statGuid).append(",");
var4.append(par2Map.get(var7)).append(",");
}
if (!var5)
{
var3.append("}");
}
MD5String var8 = new MD5String(par1Str);
var3.append("\r\n ],\r\n");
var3.append(" \"checksum\":\"").append(var8.getMD5String(var4.toString())).append("\"\r\n");
var3.append("}");
return var3.toString();
}
/**
* Returns true if the achievement has been unlocked.
*/
public boolean hasAchievementUnlocked(Achievement par1Achievement)
{
return this.field_77457_a.containsKey(par1Achievement);
}
/**
* Returns true if the parent has been unlocked, or there is no parent
*/
public boolean canUnlockAchievement(Achievement par1Achievement)
{
return par1Achievement.parentAchievement == null || this.hasAchievementUnlocked(par1Achievement.parentAchievement);
}
public int writeStat(StatBase par1StatBase)
{
Integer var2 = (Integer)this.field_77457_a.get(par1StatBase);
return var2 == null ? 0 : var2.intValue();
}
public void syncStats()
{
this.statsSyncher.syncStatsFileWithMap(this.func_77445_b());
}
public void func_77449_e()
{
if (this.field_77456_c && this.statsSyncher.func_77425_c())
{
this.statsSyncher.beginSendStats(this.func_77445_b());
}
this.statsSyncher.func_77422_e();
}
}