content: package com.rs2.net.packets.impl;
  
  import java.io.BufferedWriter;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import com.rs2.game.players.Player;
  import com.rs2.net.Packet;
  import com.rs2.util.Misc;
  
  public class ReportHandler {
  
  	public static String[] savedNames = new String[500];
  	public static String[] savedSpeach = new String[500];
  	public static String[] savedTimes = new String[500];
  
  	/**
  	 * Reports
  	 */
  
  	public static final String[] reportNames = { "Offensive language",
  			"Item scamming", "Password scamming", "Bug abuse",
  			"Staff impersonation", "Account Sharing/Trading", "Macroing",
  			"Multiple Logging in", "Encouragig others to break the rules",
  			"Misuse of Customer Support", "Advertising", "Real World Trading",
  			"Asking for personal detail" };
  
  	/**
  	 * Adding texts
  	 * 
  	 * @param name
  	 *            The player's name.
  	 * @param data
  	 *            The data.
  	 * @param dataLength
  	 *            The data's length.
  	 */
  
  	public static void addText(String name, byte[] data, int dataLength) {
  		for (int i = 499; i > 0; i--) {
  			savedNames[i] = savedNames[i - 1];
  			savedSpeach[i] = savedSpeach[i - 1];
  			savedTimes[i] = savedTimes[i - 1];
  		}
  		savedNames[0] = name;
  		savedSpeach[0] = Misc.textUnpack(data, dataLength);
  		String minute = new SimpleDateFormat("mm").format(new Date());
  		String second = new SimpleDateFormat("ss").format(new Date());
  		String hour = new SimpleDateFormat("hh").format(new Date());
  		savedTimes[0] = hour + ":" + minute + ":" + second;
  	}
  
  	/**
  	 * Report Handler
  	 * 
  	 * @param c
  	 *            Client x
  	 * @throws Exception
  	 *             ex
  	 */
  
  	public static void handleReport(Player c, Packet packet) throws Exception {
  		String player = Misc.longToReportPlayerName(packet.readQWord2());
  		player = player.replaceAll("_", " ");
  		byte rule = (byte) packet.readUnsignedByte();
  		int mute = packet.readUnsignedByte();
  
  		if (c.lastReported.equalsIgnoreCase(player) && System.currentTimeMillis() - c.lastReport < 60000) {
  			c.getPacketSender().sendMessage("You can only report a player once every 60 seconds.");
  			return;
  		}
  		if (c.playerName.equalsIgnoreCase(player)) {
  			c.getPacketSender().sendMessage("You cannot report yourself!");
  			return;
  		}
  		if (hasSpoke(player)) {
  			String sendText = "";
  
  			for (int i = 20; i > 0; i--) {
  				if (savedNames[i] != null) {
  					if (savedNames[i].equalsIgnoreCase(c.playerName)
  							|| savedNames[i].equalsIgnoreCase(player)) {
  						sendText += " -[" + savedTimes[i] + ": "
  								+ savedNames[i] + "]: " + savedSpeach[i]
  								+ "\r\n";
  					}
  				}
  			}
  
  			sendText = sendText.replaceAll("'", " ");
  			String month = getMonth(new SimpleDateFormat("MM")
  					.format(new Date()));
  			String day = new SimpleDateFormat("dd").format(new Date());
  			writeReport("" + player + " was reported by " + c.playerName + ", "
  					+ reportNames[rule] + ", " + month + ", " + day + "",
  					sendText + ".", reportNames[rule]);
  			c.getPacketSender()
  					.sendMessage(
  							"Thank you, your report has been received and will be reviewed.");
  			if (mute == 1 && c.playerRights > 0) {
  				c.getPacketSender()
  						.sendMessage(
  								"This user is not muted yet! Go to the MODCP on the forums to mute him!");
  				c.getPacketSender()
  						.sendMessage(
  								"After you have muted him there, do ::update (username) to finish the mute!");
  			}
  			c.lastReported = player;
  			c.lastReport = System.currentTimeMillis();
  		} else {
  			c.getPacketSender()
  					.sendMessage(
  							"You can only report someone who has spoken in the last 60 seconds.");
  		}
  	}
  
  	/**
  	 * Saves Reports to System
  	 * 
  	 * @param data
  	 *            The data.
  	 * @param text
  	 *            The text.
  	 * @param file
  	 *            The file.
  	 */
  
  	public static void writeReport(String data, String text, String file) {
  		BufferedWriter bw = null;
  		try {
  			int time = (int) System.currentTimeMillis();
  			String month = getMonth(new SimpleDateFormat("MM")
  					.format(new Date()));
  			String day = new SimpleDateFormat("dd").format(new Date());
  			bw = new BufferedWriter(new FileWriter(
  					"data/logs/reports/"
  							+ file + ".txt", true));
  			bw.write(data);
  			bw.newLine();
  			bw.write(text);
  			bw.newLine();
  			bw.newLine();
  			bw.flush();
  		} catch (IOException ioe) {
  			ioe.printStackTrace();
  		} finally {
  			if (bw != null) {
  				try {
  					bw.close();
  				} catch (IOException ioe2) {
  					System.out.println("Error writing system log.");
  					ioe2.printStackTrace();
  				}
  			}
  		}
  
  	}
  
  	public static boolean hasSpoke(String s) {
  		for (int i = 0; i < 500; i++) {
  			if (savedNames[i] != null) {
  				if (savedNames[i].equalsIgnoreCase(s)) {
  					return true;
  				}
  			}
  		}
  		return false;
  	}
  
  	/**
  	 * Gets the Month
  	 * 
  	 * @param s
  	 *            The s.
  	 * @return return
  	 */
  
  	public static String getMonth(String s) {
  		try {
  			int i = Integer.parseInt(s);
  			String[] months = { "", "January", "February", "March", "April",
  					"May", "June", "July", "August", "September", "October",
  					"November", "December" };
  			return months[i];
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  		return "Unknown";
  	}
  }
  