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

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


class Scale(Object):
    """Represents a scale transformation applied to an object.
    See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#scale
    """

    def __init__(self, v: TUnion[list, Point, float, int], child: Object):
        if isinstance(v, float) or isinstance(v, int):
            v = [v, v, v]
        self.v = Point.c(v)
        self.child = child

    def render(self) -> str:
        """Render the object into OpenSCAD code"""
        return f"scale(v={self.v.render()}){{\n{self.child.render()}\n}}"