/* **********************************
 *   SetQualities.java
 *     SetQualities
 * **********************************/
package sdg.admin.utils;

import edu.neu.ccs.demeterf.*;
import gen.*;
import sdg.local.utils.*;

/** 
 * @author Alex Dubreuil */
public class SetQualities extends Bc
{
	private Store store;
	
	public SetQualities(Store s) { store = s; }
    
	public Transaction combine(Transaction trans) { return trans; }
	
    public FinishTrans combine(FinishTrans trans)
    {
		Derivative d = DerivativesFinder.derByName(store, trans.derivativeName());
        return new FinishTrans(trans.derivativeName(), setQual(d.optraw.inner(), trans.finish));
    }
    public static PlayerTransaction setQs(PlayerTransaction pTrans, Store s, Control c){
        return new Traversal(new SetQualities(s), c).<PlayerTransaction>traverse(pTrans);
    }
    
    private FinishedProduct setQual(RawMaterial rm, FinishedProduct fp)
    {
    	return new FinishedProduct(fp.ip, ComputeQuality.quality(rm, fp.ip.assignment));
    }
}
//
//class SetQuality extends Bc{
//    public Derivative combine(Derivative d) { return d; }
//    public Derivative combine(Derivative d,
//            String name,
//            PlayerID seller,
//            Option<PlayerID> buyer,
//            Price price,
//            Type type,
//            Some<RawMaterial> rm,
//            Some<FinishedProduct> fp)
//    {
//        return new Derivative(name, seller, buyer, price, type, rm,
//                Option.<FinishedProduct>some(new FinishedProduct(fp.inner().ip, 
//                        ComputeQuality.quality(rm.inner(), fp.inner().ip.assignment))));
//    }
//}