import Screen from '../screen'
import { Texture, Material } from '../mesh/material'

const clip = 1 / 100

const VoxelTexture = {
  size: 0,
  voxelSize: 0,
  texture: null,
  material: null,
  loadFromFile: async (fileName, size) => {
    VoxelTexture.texture = await Texture.fromFile(Screen.gl, fileName, true, Screen.gl.NEAREST, Screen.gl.CLAMP_TO_EDGE)
    VoxelTexture.size = size
    VoxelTexture.voxelSize = 1 / size
    VoxelTexture.material = new Material([VoxelTexture.texture])
  },
  faceUVs: (textureIndex) => {
    let x = textureIndex / VoxelTexture.size
    let y = textureIndex - (x * VoxelTexture.size)

    y = 1 - y - VoxelTexture.voxelSize

    return [
      [x + clip, y + clip],
      [x + clip, y + VoxelTexture.voxelSize - clip],
      [x - clip + VoxelTexture.voxelSize, y + clip],
      [x - clip + VoxelTexture.voxelSize, y - clip + VoxelTexture.voxelSize]
    ]
  }
}

export default VoxelTexture
