from typing import Union as TUnion
from typing import List
import math
import numpy as np

from openscad_py.point import Point
from openscad_py.object_ import Object


class Cube(Object):
    """A 3D primitive, cube.

    See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube
    """

    def __init__(self, size: TUnion[list, Point], center: bool = False):
        """
        Creates a cube in the first octant. When `center` is True, the cube is centered on the origin.

        Arguments:
            - size: a Point object or a list of `x, y, z` sizes
            - center: if True, the cube is centered on the origin
        """
        self.size = Point.c(size)
        self.center = center

    def render(self):
        """Render the object into OpenSCAD code"""
        return f"cube(size={self.size.render()}, center={self._center()});"