package captiveportal;

import java.util.Random;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

public class json {
	private String[] listTickets(String url, String json) throws Exception {
		 
		
		URL http = new URL(url);
		HttpURLConnection con = (HttpURLConnection) http.openConnection();
 
		//add reuqest header
		con.setRequestMethod("POST");
		con.setRequestProperty("User-Agent", "Mozilla/5.0");
		con.setRequestProperty("Content-Type", "application/json");
		con.setRequestProperty("Accept", "application/json");
		con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
 
		// Send post request
		con.setDoOutput(true);
		OutputStreamWriter data= new OutputStreamWriter(con.getOutputStream());
		data.write(json);
		data.flush();
		BufferedReader in = new BufferedReader(
		        new InputStreamReader(con.getInputStream()));
		String inputLine;
		StringBuffer response = new StringBuffer();
 
		while ((inputLine = in.readLine()) != null) {
			response.append(inputLine);
		}
		in.close();
 
		//print result
		JSONParser parser=new JSONParser();
	      String s = response.toString();
	      
	      try{
	         Object obj = parser.parse(s);
	         JSONObject tickets = (JSONObject)obj;
	         JSONArray array = (JSONArray)tickets.get("tickets");
	         String[] ticketNumbers = new String[(int) array.size()];
	         for(int i = 0; i < (int) array.size(); i++)
	         	{
	        	 JSONObject ticketNumber = (JSONObject)array.get(i);
	        	 ticketNumbers[i] = (String) ticketNumber.get("ticketNumber");
	         	}
	         return ticketNumbers;
	      }catch(ParseException pe){
	         System.out.println("position: " + pe.getPosition());
	         System.out.println(pe);
	      }
	     String[] returnArray = {"ERROR", "FOUTMELDING"};
		return returnArray;
	      
 
	}
	private String grandAccessRequest(String json) throws Exception {
		 
		
		URL http = new URL("http://webapi.implementation.computerscience.international:9323/CFIS/Ticket");
		HttpURLConnection con = (HttpURLConnection) http.openConnection();
 
		//add reuqest header
		con.setRequestMethod("POST");
		con.setRequestProperty("User-Agent", "Mozilla/5.0");
		con.setRequestProperty("Content-Type", "application/json");
		con.setRequestProperty("Accept", "application/json");
		con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
 
		// Send post request
		con.setDoOutput(true);
		OutputStreamWriter data= new OutputStreamWriter(con.getOutputStream());
		data.write(json);
		data.flush();
		BufferedReader in = new BufferedReader(
		        new InputStreamReader(con.getInputStream()));
		String inputLine;
		StringBuffer response = new StringBuffer();
 
		while ((inputLine = in.readLine()) != null) {
			response.append(inputLine);
		}
		in.close();
 
		//print result
		JSONParser parser=new JSONParser();
	      String s = response.toString();
	      Object obj = parser.parse(s);
	      JSONObject resultCode = (JSONObject)obj;
	      return (String) resultCode.get("result");  
	}
	@SuppressWarnings("unchecked")
	public boolean checkUser(String ticketNumber) throws Exception
		{
		JSONObject json=new JSONObject();
		Random random = new Random();
		int  requestId = random.nextInt(9999) + 1000;
		json.put("function", "List");
		json.put("teamId", "IN103-3");
		json.put("teamKey", "8b846f08-caca-4aab-b254-0109c5997053");
		json.put("requestId", new Integer(requestId));
		StringWriter out = new StringWriter();
		  json.writeJSONString(out);
		  String jsonText = out.toString();
		
		String[] ticketNumbers = listTickets("http://webapi.implementation.computerscience.international:9323/CFIS/Ticket", jsonText);
		for(int i = 0; i < ticketNumbers.length; i++)
			{
			if(new String(ticketNumbers[i]).equals(ticketNumber))
				{
				return true;
				}
			}
		return false;
		}
	@SuppressWarnings("unchecked")
	public boolean grandAccess(String ticketNumber) throws Exception 
		{
		JSONObject json=new JSONObject();
		Random random = new Random();
		int  requestId = random.nextInt(9999) + 1000;
		json.put("function", "RegisterInternetAccess");
		json.put("teamId", "IN103-3");
		json.put("teamKey", "8b846f08-caca-4aab-b254-0109c5997053");
		json.put("requestId", new Integer(requestId));
		json.put("ticketNumber", ticketNumber);
		StringWriter out = new StringWriter();
		  json.writeJSONString(out);
		  //String jsonText = out.toString();
		
		//String grandResult = grandAccessRequest(jsonText);
		return true;
		/*if(grandResult == "8" || grandResult == "0")
		{
			return true;
		}
		else
		{
			System.out.println("Suddenly le wild error code (" +grandResult+ ") appeared!!");
			return false;
		}*/
	}
}
