#include <stdio.h>
#include "ShapeP.h"

static void init(Core p);

ShapeClassDescriptor shape_class_descriptor = {
    /* Core part */
    {
        "Shape",                /* class_name */
        &core_class_descriptor, /* super_class */
        sizeof(ShapeObj),       /* size_of_instance */
        NULL,                   /* class_initializer */
        init,                   /* initializer */
        NULL,                   /* finalizer */
    },
    /* Shape part */
    {
        NULL,                   /* draw */
    },
};

CoreClassDescriptor *shapeClass
    = (CoreClassDescriptor*)&shape_class_descriptor;

static void
init(Core p)
{
    Shape shape = (Shape)p;

    shape->shape.color = BLACK;
    shape->shape.boundary[0].x = 0.0;
    shape->shape.boundary[0].y = 0.0;
    shape->shape.boundary[1].x = 0.0;
    shape->shape.boundary[1].y = 0.0;

    printf("shape initialized.\n");
}

void
draw_shape(Shape shape)
{
    ShapeClassDescriptor *shape_class;

    shape_class = (ShapeClassDescriptor*)shape->core.class_descriptor;

    shape_class->shape.draw(shape);
}