:- expects_dialect(lps).

% LogicaB2018 Contrato 116
% Jacinto Dávila
% partially based on this Syntax https://bitbucket.org/lpsmasters/lps_corner/wiki/Syntax

maxTime(10). 

actions dragar(Camion, Cantidad, Origen), % Dragar Cantidad de Tierra desde Origen para cargar Camions
	   botar(Camion, Cantidad, Destino), % vaciar el Camion en Destino
       pagar(Cantidad), % pagar por Cantidad de tierra 
       paralizar(Quien),  % Quien paraliza la obra
       modificar(Especificacion). % Modificar la especificación de la obra

events
       validar(Camion, Cantidad, Destino).  % validar que Camion se deposito en Destino.

fluents obra_paralizada,
        especificacion(E),
        cuenta_camion(C), % van C camiones en la obra
        por_pagar(T), % falta pagar por T metros cúbicos de tierra
		validado(C, Cant, L). 

excavar(Camion, Cantidad, Lugar) from T1 to T2 if
   especificacion(E) at T1, 
   cuenta_camion(Camion) at T1,
   conforme_a(E, Cantidad, Lugar),
   capacidad(Camion, Cantidad), 
   dragar(Camion, Cantidad, Lugar) from T1 to T2. 

conforme_a(_,_,_). % Sin especificación real
capacidad(_, 10).  % Todos los camiones tienen capacidad de 10 metros cúbicos

fecha_tope(8).

if not(obra_paralizada) at T, not(fecha_tope(T)) at T
then excavar(Camion, Cantidad, Lugar) from T to T2. 

if dragar(Camion, Cantidad, aqui) from T1 to T2 then botar(Camion, Cantidad, alli) from T2 to T3. 

dragar(Camion, Cantidad, Lugar) updates Camion to Siguiente in cuenta_camion(Camion) if
  Siguiente is Camion + 1. 

botar(Camion, Cantidad, Lugar) updates Cuenta to NuevaCuenta in por_pagar(Cuenta) if
  validado(Camion, Cantidad, Lugar), NuevaCuenta is Cuenta + Cantidad. 

validar(Camion, Cantidad, Lugar) initiates validado(Camion, Cantidad, Lugar) if
  cuenta_camion(Camion). 

initially especificacion(vacia), cuenta_camion(1), por_pagar(0). 

observe validar(_, 10, alli) from 1 to 2. 
observe validar(_, 10, alli) from 2 to 3. 
observe validar(_, 10, alli) from 3 to 4. 
observe validar(_, 10, alli) from 4 to 5. 
observe validar(_, 10, alli) from 6 to 7. 
observe validar(_, 10, alli) from 7 to 8.