package org.libvirt;

import org.libvirt.jna.virStorageVolInfo;

/**
 * Detailed information about a storage pool.
 */
public class StorageVolInfo {

    public static enum VirStorageVolType {
        /**
         * Regular file based volumes
         */
        VIR_STORAGE_VOL_FILE,
        /**
         * Block based volumes
         */
        VIR_STORAGE_VOL_BLOCK
    }

    /**
     * The type of the Volume
     */
    public VirStorageVolType type;
    /**
     * Logical size bytes
     */
    public long capacity;

    /**
     * Current allocation bytes
     */
    public long allocation;;

    /**
     * This is meant to be called from the JNI side, as a convenience
     * constructor
     *
     * @param type
     *            the type, as defined by libvirt
     * @param capacity
     * @param allocation
     */
    StorageVolInfo(int type, long capacity, long allocation) {
        switch (type) {
            case 0:
                this.type = VirStorageVolType.VIR_STORAGE_VOL_FILE;
                break;
            case 1:
                this.type = VirStorageVolType.VIR_STORAGE_VOL_BLOCK;
                break;
            default:
                assert (false);
        }
        this.capacity = capacity;
        this.allocation = allocation;
    }

    StorageVolInfo(virStorageVolInfo volInfo) {
        this(volInfo.type, volInfo.capacity, volInfo.allocation);
    }

    @Override
    public String toString() {
        return String.format("type:%s%ncapacity:%d%nallocation:%d%n", type, capacity, allocation);
    }
}
