package controler.rapport;

import java.awt.Desktop;
import java.io.File;
import java.sql.Connection;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import rapport.RapportCheckout;
import view.vueRapportArriveeDepart.VueRapportArriveeDepart;

import commander.Commander;

import controler.Message;
import database.crud.ChambreCrud;
import database.crud.ReservationCrudGeneral;
import database.dataset.Chambre;
import database.dataset.Reservation;

public class ControlerRapportArriveDepart {
	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRapportArriveeDepart))
				return;
			VueRapportArriveeDepart vue = (VueRapportArriveeDepart)caster;
			Connection connection = Commander.getInstance().getConnectionBD();

			ChambreCrud chambreCrud = new ChambreCrud(connection);
			ReservationCrudGeneral reservationCrud = new ReservationCrudGeneral(connection);
			
			List<Reservation> reservation = new ArrayList<>();
			
			if ("CHECKIN".equals(vue.getSelectedInOut()))
			{
				reservation = reservationCrud.readAllBeginning(vue.getDate().toString());
			}
			else if("CHECKOUT".equals(vue.getSelectedInOut()))
			{
				reservation = reservationCrud.readAllEnding(vue.getDate().toString());
			}
				vue.tableClear();
				for (Reservation r : reservation){
					Chambre chambre = chambreCrud.readById(r.getChambre_fk_id());
					vue.addRow(chambre.getChambre_numero(), "", r.getReservation_fin().toString());
				}
			
		}
	};
	
	public static final Message imprimer = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRapportArriveeDepart))
				return;
			VueRapportArriveeDepart vue = (VueRapportArriveeDepart)caster;
			Connection connection = Commander.getInstance().getConnectionBD();

			ChambreCrud chambreCrud = new ChambreCrud(connection);
			ReservationCrudGeneral reservationCrud = new ReservationCrudGeneral(connection);
			
			List<Reservation> reservation = new ArrayList<>();
			
			if ("CHECKIN".equals(vue.getSelectedInOut()))
			{
				reservation = reservationCrud.readAllBeginning(vue.getDate().toString());
			}
			else if("CHECKOUT".equals(vue.getSelectedInOut()))
			{
				reservation = reservationCrud.readAllEnding(vue.getDate().toString());
			}
			
			RapportCheckout rapport = new RapportCheckout();
			rapport.setDateCheckout(Date.valueOf(vue.getDate()));
			for (Reservation r : reservation){
				Chambre chambre = chambreCrud.readById(r.getChambre_fk_id());
				rapport.add(chambre.getChambre_numero(), r.getReservation_fin(), "", "");
			}
			String filename = "checkout_"+new Date(System.currentTimeMillis()).toString()+".pdf";
			rapport.generate();
			rapport.saveas(filename);
			File file = new File(filename);
			Desktop.getDesktop().open(file);
		}
	};
}
