// Copyright (c) 2012-2017 VideoStitch SAS
// Copyright (c) 2018 stitchEm

#include "libvideostitch/projections.hpp"

namespace VideoStitch {
namespace Core {

const char* getPanoProjectionName(const PanoProjection& proj) {
  PanoProjection::Type ptype = proj;
  switch (ptype) {
    case PanoProjection::Rectilinear:
      return "rectilinear";
    case PanoProjection::Cylindrical:
      return "cylindrical";
    case PanoProjection::Equirectangular:
      return "equirectangular";
    case PanoProjection::FullFrameFisheye:
      return "ff_fisheye";
    case PanoProjection::Stereographic:
      return "stereographic";
    case PanoProjection::CircularFisheye:
      return "circular_fisheye";
    case PanoProjection::Cubemap:
      return "cubemap";
    case PanoProjection::EquiangularCubemap:
      return "equiangular_cubemap";
  }
  return NULL;
}

bool getPanoProjectionFromName(const std::string& name, PanoProjection& proj) {
  if (!name.compare("rectilinear")) {
    proj = PanoProjection(PanoProjection::Rectilinear);
    return true;
  } else if (!name.compare("equirectangular")) {
    proj = PanoProjection(PanoProjection::Equirectangular);
    return true;
  } else if (!name.compare("ff_fisheye")) {
    proj = PanoProjection(PanoProjection::FullFrameFisheye);
    return true;
  } else if (!name.compare("stereographic")) {
    proj = PanoProjection(PanoProjection::Stereographic);
    return true;
  } else if (!name.compare("circular_fisheye")) {
    proj = PanoProjection(PanoProjection::CircularFisheye);
    return true;
  } else if (!name.compare("cubemap")) {
    proj = PanoProjection(PanoProjection::Cubemap);
    return true;
  } else if (!name.compare("equiangular_cubemap")) {
    proj = PanoProjection(PanoProjection::EquiangularCubemap);
    return true;
  }
  return false;
}

}  // namespace Core
}  // namespace VideoStitch