// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <optional>

#include "impeller/geometry/matrix.h"

namespace impeller {
namespace scene {

class Camera {
 public:
  static Camera MakePerspective(Scalar fov_y, Vector3 position);

  Camera LookAt(Vector3 target, Vector3 up = Vector3(0, -1, 0)) const;

  Matrix GetTransform(ISize target_size) const;

 private:
  Scalar fov_y_ = 60;
  Vector3 position_ = Vector3();
  Vector3 target_ = Vector3(0, 0, -1);
  Vector3 up_ = Vector3(0, -1, 0);
  Scalar z_near_ = 0.1;
  Scalar z_far_ = 1000;

  mutable std::optional<Matrix> transform_;
};

}  // namespace scene
}  // namespace impeller
