/* rugby-possibility.c
 *
 * Copyright 2018 Bruce Cowan <bruce@bcowan.eu>
 *
 * This file is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * This file is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * SPDX-License-Identifier: LGPL-3.0-or-later
 */

#include "rugby-possibility.h"

struct _RugbyPossibility
{
    GObject parent_instance;

    gint tries;
    gint utries;
    gint kicks;
};

G_DEFINE_TYPE (RugbyPossibility, rugby_possibility, G_TYPE_OBJECT)

enum
{
    PROP_0,
    PROP_TRIES,
    PROP_UTRIES,
    PROP_KICKS,
    N_PROPS
};

static GParamSpec *properties[N_PROPS];

static void
rugby_possibility_get_property (GObject    *object,
                                guint       prop_id,
                                GValue     *value,
                                GParamSpec *pspec)
{
    RugbyPossibility *self = RUGBY_POSSIBILITY (object);

    switch (prop_id)
      {
      case PROP_TRIES:
          g_value_set_int (value, self->tries);
          break;
      case PROP_UTRIES:
          g_value_set_int (value, self->utries);
          break;
      case PROP_KICKS:
          g_value_set_int (value, self->kicks);
          break;
      default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      }
}

static void
rugby_possibility_set_property (GObject      *object,
                                guint         prop_id,
                                const GValue *value,
                                GParamSpec   *pspec)
{
    RugbyPossibility *self = RUGBY_POSSIBILITY (object);

    switch (prop_id)
      {
      case PROP_TRIES:
          self->tries = g_value_get_int (value);
          break;
      case PROP_UTRIES:
          self->utries = g_value_get_int (value);
          break;
      case PROP_KICKS:
          self->kicks = g_value_get_int (value);
          break;
      default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      }
}

static void
rugby_possibility_class_init (RugbyPossibilityClass *klass)
{
    GObjectClass *object_class = G_OBJECT_CLASS (klass);

    object_class->get_property = rugby_possibility_get_property;
    object_class->set_property = rugby_possibility_set_property;

    properties[PROP_TRIES] =
        g_param_spec_int ("tries", "Tries", "Converted tries",
                          0, 28, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
    properties[PROP_UTRIES] =
        g_param_spec_int ("utries", "Utries", "Unconverted tries",
                          0, 40, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
    properties[PROP_KICKS] =
        g_param_spec_int ("kicks", "Kicks", "Penalties and drop goals",
                          0, 66, 0,
                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);

    g_object_class_install_properties (object_class,
                                       N_PROPS,
                                       properties);

}

static void
rugby_possibility_init (RugbyPossibility *self)
{
}

RugbyPossibility *
rugby_possibility_new (gint tries,
                       gint utries,
                       gint kicks)
{
    return g_object_new (RUGBY_TYPE_POSSIBILITY,
                         "tries", tries,
                         "utries", utries,
                         "kicks", kicks,
                         NULL);
}