from server.model.hand import Hand
from server.model.card import Value, Color, Card


def carre(value) -> Hand:
    return Hand([
        Card(value, Color.Hearts),
        Card(value, Color.Clubs),
        Card(value, Color.Diamonds),
        Card(value, Color.Spades)
    ])


def full(value_aux: Value,
         value_par: Value) -> Hand:
    return Hand([
        Card(value_aux, Color.Hearts),
        Card(value_aux, Color.Clubs),
        Card(value_aux, Color.Spades),
        Card(value_par, Color.Hearts),
        Card(value_par, Color.Clubs)
    ])


def brelan(value) -> Hand:
    return Hand([
        Card(value, Color.Hearts),
        Card(value, Color.Clubs),
        Card(value, Color.Diamonds)
    ])


def pair(value) -> Hand:
    return Hand([
        Card(value, Color.Hearts),
        Card(value, Color.Clubs)
    ])


def single(low_value) -> Hand:
    return Hand([
        Card(low_value, Color.Hearts)
    ])


def double_pair(value: Value, other: Value = None):
    # Ensure no carre
    if not other or other == value:
        other = Value.Two if value == Value.Three else Value.Three
    assert other != value

    return Hand([
        # Pair of value
        Card(value, Color.Hearts),
        Card(value, Color.Clubs),
        # And pair of twos or threes
        Card(other, Color.Hearts),
        Card(other, Color.Clubs)
    ])