package net.pokeranalytics.android.exceptions

import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow

class ModelException(message: String) : Exception(message)
class FormattingException(message: String) : Exception(message)
class RowRepresentableEditDescriptorException(message: String) : Exception(message)

class ConfigurationException(message: String) : Exception(message)

class EnumIdentifierNotFoundException(message: String) : Exception(message)
class MisconfiguredSavableEnumException(message: String) : Exception(message)

sealed class PokerAnalyticsException(message: String) : Exception(message) {
    object FilterElementUnknownName : PokerAnalyticsException(message = "No filterElement name was found to identify the queryCondition")
    object FilterElementUnknownSectionName: PokerAnalyticsException(message = "No filterElement section name was found to identify the queryCondition")
    object FilterMissingEntity: PokerAnalyticsException(message = "This queryWith has no entity initialized")
    object FilterUnhandledEntity : PokerAnalyticsException(message = "This entity is not filterable")
    object QueryValueMapUnknown: PokerAnalyticsException(message = "fieldName is missing")
    object QueryTypeUnhandled: PokerAnalyticsException(message = "queryWith type not handled")
    object QueryValueMapUnexpectedValue: PokerAnalyticsException(message = "valueMap null not expected")
    object FilterElementExpectedValueMissing : PokerAnalyticsException(message = "queryWith is empty or null")
    data class FilterElementTypeMissing(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "queryWith element '$filterElementRow' type is missing")
    data class QueryValueMapMissingKeys(val missingKeys: List<String>) : PokerAnalyticsException(message = "valueMap does not contain $missingKeys")
    data class UnknownQueryTypeForRow(val filterElementRow: FilterElementRow) : PokerAnalyticsException(message = "no queryWith type for $filterElementRow")
    data class MissingFieldNameForQueryCondition(val name: String) : PokerAnalyticsException(message = "Missing fieldname for QueryCondition ${name}")
}
