package mechanique;

import java.io.*;
import java.util.*;
import java.io.Serializable;

public class RollShelf implements Printable, Commandline, Serializable {

   public RollShelf() { }
   private ArrayList<String> rolls = new ArrayList<String>();
   private String buffer = "";
   private Receiver receiver;
   private StoryController controller;
   private String sessionName = "";
   private String fileName = "";
   private String command = "";
   public Story story;
  // public boolean first;

   public String getRolls(String path)
   {

       File file = new File(path);
       String[] list = file.list();
       String dir = "<ul>";
       Boolean firstIteration = true;

       for(String listItem: list)
       {
           dir = dir.concat("<li><a href='mq?rollFileName=").concat(path).concat(listItem);
           dir = dir.concat("'>").concat(listItem).concat("</a></li>");
       }

       dir = dir.concat("</ul>");

       return dir;
   }

   //public String doRequest(String command, String fname, String sessionName, boolean start, Story s)
   public String doRequest(String command, String fname, Story s)
   {

      // this.sessionName = sessionName;
       this.fileName = fname;
       this.command = command;

       //Story s;
     //  this.first = true;

       if (s==null)
       {
           s = (Story) toolbox.deserialize(fname);
           s.setDisplayUnit(this);
           this.story = s;
           s.run(true);
       }
       else
       {
           //s = (Story) toolbox.deserialize(sessionName+".roll");

           s.setDisplayUnit(this);
           this.buffer="";
           this.story = s;
           this.receiver = this.story.lastrc;
           this.receiver.setWait(true);
           this.receiver.receive(command,true);
         //  this.first=true;
           this.story.doStep();
       }


       return this.buffer;

   }

   public void setStory(StoryController s)
   {
       controller = s;
   }

   public void print(String t)
   {
       if (t.endsWith("-")) {
           this.buffer += " "+t.replaceAll("-$","");
       } else {
           this.buffer += "<br>"+t;
       }

   }

   public void input(Receiver r)
   {


       this.receiver = r;
       this.answer(this.command);

   }

   public void answer(String a)
   {
       if (a.equals("#save")) a="";
       if (a.equals("#mem")) a="";


     //  if (this.first){
      //
     //      this.receiver.setWait(true);
     //      this.receiver.receive(a,true);
     //      this.first=false;
     //  }else{
           this.story.lastrc = this.receiver;
           //toolbox.serialize(this.sessionName+".roll",this.story);

      // }




   }

   public Story getStory()
   {
       return this.story;
   }

}