package es.uniovi.asw.parser.differentParsers;

import es.uniovi.asw.model.Citizen;
import es.uniovi.asw.parser.RListExcel;
import es.uniovi.asw.parser.RListTXT;
import es.uniovi.asw.personalletter.MensajePersonalizado;
import es.uniovi.asw.personalletter.SingletonTextWritter;
import es.uniovi.asw.reportwritter.SingletonReporter;
import es.uniovi.asw.util.exception.CitizenException;

import java.util.List;

/**
 * Parser creado a gusto.
 * 
 * @author Javier Castro
 * 
 *         Comandos admitidos:
 * 
 *         - readExcel nombreFich - readTxt nombreFich
 *
 */
public class MyParser {
	private String[] args;
	private List<Citizen> ciudadanos;
	private String docName;

	public MyParser(String realArgs) {
		realArgs.replace("([-])\\1+", "");// Para borrar las rayas.

		this.args = realArgs.split(" ");
		ciudadanos = null;
		docName = null;
	}

	public MyParser(String[] realArgs) {
		this.args = realArgs;
		ciudadanos = null;
	}

	public void parse() throws CitizenException {
		boolean admitido = false;
		//Console.println("\nMyParser informa:\n\t"+argsToString());
		try {
			if (args.length >= 1) { // Al menos dos parametros.
				for (int i = 0; i < args.length; i++) {
					String command = args[i];
					switch (command) {

					case "readExcel":
						leerExcel(args[i + 1]);
						docName = getDocumentName(args[ i + 1]);
						i++;
						admitido = true;
						break;
					case "readTxt":
						leerTxt(args[i + 1]);
						docName = getDocumentName(args[ i + 1]);
						i++;
						admitido = true;
						break;
					case "sendPDF":
						if((ciudadanos == null || ciudadanos.size() == 0) && admitido){
							sendPdf();
						}
						break;
					case "sendTXT":
						if((ciudadanos == null || ciudadanos.size() == 0) && admitido){
							sendTXT();
						}
						break;
					case "sendDOC":
						if((ciudadanos == null || ciudadanos.size() == 0) && admitido){
							sendDOC();
						}
						break;
					}
				}
			}
		} catch (CitizenException e) {
			SingletonReporter.getInstance().getWreportP()
					.report("MyParser informa:\n-" + "Ha ocurrido un error interno al ejecutar los comandos");
			throw new CitizenException();
		}
		if (!admitido) {
			SingletonReporter.getInstance().getWreportP()
					.report("MyParser informa:\n-" + "Comando incorrecto! Se ha leido:\n\t" + argsToString());
			throw new CitizenException();

		}
	}

	private void leerExcel(String path) throws CitizenException {
		ciudadanos = new RListExcel().read(path);
	}

	private void leerTxt(String path) throws CitizenException {
		ciudadanos = new RListTXT().read(path);
	}
	
	private void sendPdf() throws CitizenException{
		for(Citizen c : ciudadanos){
			SingletonTextWritter.getInstance().getPDFTextrWitter().createDocument(docName, MensajePersonalizado.getMessage(c));
		}
	}

	private void sendTXT() throws CitizenException{
		for(Citizen c : ciudadanos){
			SingletonTextWritter.getInstance().getPlainTextWritter().createDocument(docName, MensajePersonalizado.getMessage(c));
		}
	}

	private void sendDOC() throws CitizenException{
		for(Citizen c : ciudadanos){
			SingletonTextWritter.getInstance().getWordTextWritter().createDocument(docName, MensajePersonalizado.getMessage(c));
		}
	}

	private String argsToString() {
		StringBuilder sb = new StringBuilder();
		for (String s : args) {
			sb.append(s + " ");
		}
		return sb.toString();
	}
	
	private String getDocumentName(String n){
		String[] fueraRuta = n.split("/");
		String myFile = fueraRuta[fueraRuta.length -1 ];
		//String[] cachos = myFile.split(".");
		String name = myFile.replaceAll("[.]+[a-z-A-Z]+", "");
		return name;
	}
}

@@ -589,24 +589,16 @@
 rser %7B%0A%09
-private 
 String%5B%5D
@@ -605,24 +605,16 @@
  args;%0A%09
-private 
 List%3CCit
@@ -632,24 +632,16 @@
 danos;%0A%09
-private 
 String d
@@ -1053,16 +1053,18 @@
 g());%0A%09%09
+//
 try %7B%0A%09%09
@@ -1528,32 +1528,33 @@
 dPDF%22:%0A%09%09%09%09%09%09if(
+!
 (ciudadanos == n
@@ -1590,32 +1590,80 @@
 ) && admitido)%7B%0A
+%09%09%09%09%09%09%09docName = getDocumentName(args%5B i + 1%5D);%0A
 %09%09%09%09%09%09%09sendPdf()
@@ -1707,32 +1707,33 @@
 dTXT%22:%0A%09%09%09%09%09%09if(
+!
 (ciudadanos == n
@@ -1769,32 +1769,80 @@
 ) && admitido)%7B%0A
+%09%09%09%09%09%09%09docName = getDocumentName(args%5B i + 1%5D);%0A
 %09%09%09%09%09%09%09sendTXT()
@@ -1894,16 +1894,17 @@
 %09%09%09%09%09if(
+!
 (ciudada
@@ -1952,24 +1952,72 @@
  admitido)%7B%0A
+%09%09%09%09%09%09%09docName = getDocumentName(args%5B i + 1%5D);%0A
 %09%09%09%09%09%09%09sendD
@@ -2063,16 +2063,18 @@
 %0A%09%09%09%7D%0A%09%09
+/*
 %7D catch 
@@ -2277,16 +2277,18 @@
 n();%0A%09%09%7D
+*/
 %0A%09%09if (!

Update MyParser.java