package project;
import java.util.*;

public class MainBuffer {
    private HashMap mainHashMap;
    private long maxSize;   // in byte unit
    private long freeSize; // in byte unit

    public MainBuffer (long maxSize) {
        mainHashMap = new HashMap( (int)(maxSize/5) );
        this.maxSize = maxSize;
        this.freeSize = maxSize;
    }
    
    // it may change to no fileSize variable and get the file Size from the web server
    public void addRecord(String fileName, long fileSize) {
	freeSize -= fileSize;
        if(freeSize < 0) {
            throw new IllegalStateException("Main Buffer overflow!!");
	}

	if( !mainHashMap.containsKey(fileName) ) {
            mainHashMap.put(fileName, new Long(fileSize));
            System.out.println("add a record: "+fileName+" free size is: "+freeSize);
	}
	else
            throw new IllegalStateException("Main Buffer contain that object but bufferControl don't know");
    }

    public void removeRecord(String fileName) {
	if( mainHashMap.containsKey(fileName) ) {
	    freeSize += ( (Long)mainHashMap.get(fileName) ).longValue();
	    System.out.println("remove a record: "+fileName+" free size is: "+freeSize);
	    mainHashMap.remove(fileName);
	}
	else
	    System.out.println("remove a record: "+fileName+" not find, should be one timer");
    }
    
    public long getSizeUsed() {
        return maxSize - freeSize; 
    }

    public long avaliableSize() {
	return freeSize;
    }

    public long objectCount() {
	return mainHashMap.size();
    }

    public boolean containFile (String fileName) {
        return mainHashMap.containsKey(fileName);
    }

    public long getFileSize(String fileName) {
	if( mainHashMap.containsKey(fileName) )
	    return ( (Long)mainHashMap.get(fileName) ).longValue();
	else
	    return 0;
    }
}
