/*
 * Copyright 2019 New Vector Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package im.vector.matrix.android.api.pushrules

import im.vector.matrix.android.api.session.events.model.Event

abstract class Condition(val kind: Kind) {

    enum class Kind(val value: String) {
        EventMatch("event_match"),
        ContainsDisplayName("contains_display_name"),
        RoomMemberCount("room_member_count"),
        SenderNotificationPermission("sender_notification_permission"),
        Unrecognised("");

        companion object {

            fun fromString(value: String): Kind {
                return when (value) {
                    "event_match"                    -> EventMatch
                    "contains_display_name"          -> ContainsDisplayName
                    "room_member_count"              -> RoomMemberCount
                    "sender_notification_permission" -> SenderNotificationPermission
                    else                             -> Unrecognised
                }
            }
        }
    }

    abstract fun isSatisfied(event: Event, conditionResolver: ConditionResolver): Boolean

    open fun technicalDescription(): String {
        return "Kind: $kind"
    }
}
