// ------------------------------------------
// package ecom
// ------------------------------------------
package ecom;

public final class Customer
{
   public final java.lang.String name;
   public final java.lang.String address;
   public java.lang.String toString();
}

public abstract class Product
{
   public final long code;
   public final double price;
}

public final class Book
               extends ecom.Product
{
   public final java.lang.String author;
   public final java.lang.String title;
   public java.lang.String toString();
}

public final class Record
               extends ecom.Product
{
   public final java.lang.String artist;
   public final java.lang.String title;
   public java.lang.String toString();
}

public final class Order
{
   static public abstract class Line
   {
      public final ecom.Order order;
      public final long productCode;
      public final int productQuantity;
   }

   public final long id;
   public final java.lang.String date;
   public final java.lang.String customerName;
   public final java.lang.String customerAddress;
   public final ecom.Order.Line[] lines;
   public long invoiceId;
   public boolean isProcessed();
   public ecom.Order.Line getLine(long productCode);
   public void addLine(long code,int quantity);
   public void removeLine(long code);
   public java.lang.String toString();
}

public final class Invoice
{
   static public abstract class Line
   {
      public final ecom.Invoice invoice;
      public final long orderId;
      public double orderPrice;
   }

   public final long id;
   public final java.lang.String date;
   public final java.lang.String customerName;
   public final java.lang.String customerAddress;
   public final ecom.Invoice.Line[] lines;
   public final double totalPrice;
   public double discountRatio;
   public java.lang.String message;
   public ecom.Invoice.Line getLine(long orderId);
   public void addLine(long orderId);
   public void removeLine(long orderId);
   public java.lang.String toString();
}

public final class Context
               extends ilog.rules.engine.IlrContext
{
   public ecom.Customer addCustomer(java.lang.String name,java.lang.String address);
   public ecom.Book addBook(long code,java.lang.String title,java.lang.String author,double price);
   public ecom.Record addRecord(long code,java.lang.String artist,java.lang.String title,double price);
   public ecom.Order addOrder(java.lang.String date,java.lang.String name,java.lang.String address);
   public ecom.Invoice addInvoice(java.lang.String date,java.lang.String name,java.lang.String address);
   public void removeCustomer(ecom.Customer customer);
   public void removeOrder(ecom.Order order);
   public void removeProduct(ecom.Product product);
   public void removeInvoice(ecom.Invoice invoice);
   public ecom.Customer findCustomer(java.lang.String name,java.lang.String address);
   public ecom.Order findOrder(long id);
   public ecom.Product findProduct(long code);
   public ecom.Invoice findInvoice(long id);
   public java.lang.String getToday();
}

