package file

// SyncStatus defines the synchronization status of a file
type SyncStatus int

const (
	// SyncStatusLocalOnly indicates the file exists only locally (not uploaded to cloud)
	SyncStatusLocalOnly SyncStatus = iota

	// SyncStatusCloudOnly indicates the file exists only in the cloud (metadata synced, content not downloaded)
	SyncStatusCloudOnly

	// SyncStatusSynced indicates the file exists both locally and in the cloud and is synchronized
	SyncStatusSynced

	// SyncStatusModifiedLocally indicates the file exists in both places but has local changes pending upload
	SyncStatusModifiedLocally
)

// String returns a human-readable string representation of the sync status
func (s SyncStatus) String() string {
	switch s {
	case SyncStatusLocalOnly:
		return "local_only"
	case SyncStatusCloudOnly:
		return "cloud_only"
	case SyncStatusSynced:
		return "synced"
	case SyncStatusModifiedLocally:
		return "modified_locally"
	default:
		return "unknown"
	}
}

// Storage mode constants define which file versions to keep locally
const (
	// StorageModeEncryptedOnly - Only keep encrypted version locally (most secure)
	StorageModeEncryptedOnly = "encrypted_only"

	// StorageModeDecryptedOnly - Only keep decrypted version locally (not recommended)
	StorageModeDecryptedOnly = "decrypted_only"

	// StorageModeHybrid - Keep both encrypted and decrypted versions (default, convenient)
	StorageModeHybrid = "hybrid"
)

// File state constants
const (
	// StatePending is the initial state of a file before it is uploaded
	StatePending = "pending"

	// StateActive indicates that the file is fully uploaded and ready for use
	StateActive = "active"

	// StateDeleted marks the file as deleted
	StateDeleted = "deleted"
)
