import vtk


class VtkAdaptor:
    def __init__(self, **kwargs):
        self.point_count = 0
        self.face_count = 0
        self.points = None
        self.polys = None
        self.poly_data = None
        self.scalars = None

    def create_empty_mesh(self):
        self.pcoords = vtk.vtkFloatArray()
        self.pcoords.SetNumberOfComponents(3)
        self.points = vtk.vtkPoints()
        self.polys = vtk.vtkCellArray()
        self.poly_data = vtk.vtkPolyData()

    def initialize_colors(self):
        self.scalars = vtk.vtkFloatArray()
        self.scalars.SetNumberOfComponents(1)
        self.scalars.SetNumberOfTuples(self.face_count)

    def create_vert(self, coords):
        self.pcoords.InsertNextTuple3(*coords)
        index = self.point_count
        self.point_count += 1
        return index

    def create_face(self, verts):
        self.polys.InsertNextCell(len(verts), verts)
        index = self.face_count
        self.face_count += 1
        return index

    def color_face(self, face, color_index):
        self.scalars.SetTuple1(face, color_index)

    def finish_mesh(self):
        self.points.SetData(self.pcoords)
        self.poly_data.SetPoints(self.points)
        self.poly_data.SetPolys(self.polys)
        if self.scalars:
            self.poly_data.GetCellData().SetScalars(self.scalars)

    def get_mesh(self):
        return self.poly_data