package kha.korehl;

class Video extends kha.Video {
	public var _video: Pointer;

	public function new(filename: String) {
		super();
		init(filename);
	}

	function init(filename: String) {
		_video = kinc_video_create(StringHelper.convert(filename));
	}

	override public function play(loop: Bool = false): Void {
		kinc_video_play(_video);
	}

	override public function pause(): Void {
		kinc_video_pause(_video);
	}

	override public function stop(): Void {
		kinc_video_stop(_video);
	}

	override public function getLength(): Int { // Miliseconds
		return kinc_video_get_duration(_video);
	}

	override public function getCurrentPos(): Int { // Miliseconds
		return kinc_video_get_position(_video);
	}

	override function get_position(): Int {
		return getCurrentPos();
	}

	override function set_position(value: Int): Int {
		kinc_video_set_position(_video, value);
		return value;
	}

	override public function isFinished(): Bool {
		return kinc_video_is_finished(_video);
	}

	override public function width(): Int {
		return kinc_video_width(_video);
	}

	override public function height(): Int {
		return kinc_video_height(_video);
	}

	override public function unload(): Void {
		kinc_video_unload(_video);
	}

	@:hlNative("std", "kinc_video_create") static function kinc_video_create(filename: hl.Bytes): Pointer {
		return null;
	}

	@:hlNative("std", "kinc_video_play") static function kinc_video_play(video: Pointer): Void {}

	@:hlNative("std", "kinc_video_pause") static function kinc_video_pause(video: Pointer): Void {}

	@:hlNative("std", "kinc_video_stop") static function kinc_video_stop(video: Pointer): Void {}

	@:hlNative("std", "kinc_video_get_duration") static function kinc_video_get_duration(video: Pointer): Int {
		return 0;
	}

	@:hlNative("std", "kinc_video_get_position") static function kinc_video_get_position(video: Pointer): Int {
		return 0;
	}

	@:hlNative("std", "kinc_video_set_position") static function kinc_video_set_position(video: Pointer, value: Int): Int {
		return 0;
	}

	@:hlNative("std", "kinc_video_is_finished") static function kinc_video_is_finished(video: Pointer): Bool {
		return false;
	}

	@:hlNative("std", "kinc_video_width") static function kinc_video_width(video: Pointer): Int {
		return 0;
	}

	@:hlNative("std", "kinc_video_height") static function kinc_video_height(video: Pointer): Int {
		return 0;
	}

	@:hlNative("std", "kinc_video_unload") static function kinc_video_unload(video: Pointer): Void {}
}