//----------------------------------------------------------------------
//  This software is part of the OpenBeOS distribution and is covered 
//  by the OpenBeOS license.
//---------------------------------------------------------------------

#ifndef _DISK_SYSTEM_H
#define _DISK_SYSTEM_H

#include <DiskDeviceDefs.h>
#include <String.h>

class BPartition;
struct user_disk_system_info;

class BDiskSystem {
public:
	BDiskSystem();
	~BDiskSystem();

	status_t InitCheck() const;

	const char *Name() const;
	const char *PrettyName() const;

	bool SupportsDefragmenting(bool *whileMounted) const;
	bool SupportsRepairing(bool checkOnly, bool *whileMounted) const;
	bool SupportsResizing(bool *whileMounted) const;
	bool SupportsResizingChild() const;
	bool SupportsMoving(bool *whileMounted) const;
	bool SupportsMovingChild() const;
	bool SupportsSettingName() const;
	bool SupportsSettingContentName(bool *whileMounted) const;
	bool SupportsSettingType() const;
	bool SupportsSettingParameters() const;
	bool SupportsSettingContentParameters(bool *whileMounted) const;
	bool SupportsCreatingChild() const;
	bool SupportsDeletingChild() const;
	bool SupportsInitializing() const;

	status_t GetNextSupportedType(BPartition *partition, int32 *cookie,
								  char *type) const;
		// Returns all types the disk system supports for children of the
		// supplied partition.
	status_t GetTypeForContentType(const char *contentType, char *type) const;

	bool IsPartitioningSystem() const;
	bool IsFileSystem() const;
	bool IsSubSystemFor(BPartition *parent) const;

private:
	status_t _SetTo(disk_system_id id);
	status_t _SetTo(user_disk_system_info *info);
	void _Unset();

	friend class BDiskDeviceRoster;
	friend class BPartition;

	disk_system_id	fID;
	BString			fName;
	BString			fPrettyName;
	uint32			fFlags;
};

#endif	// _DISK_SYSTEM_H
