from typing import Union

from litchi_wp.action import Action as Action, ActionType as ActionType
from litchi_wp.altitude import Altitude as Altitude, AltitudeMode as AltitudeMode
from litchi_wp.enums import RotationDirection as RotationDirection
from litchi_wp.gimbal import Gimbal as Gimbal, GimbalMode as GimbalMode
from litchi_wp.photo import Photo as Photo
from litchi_wp.poi import Poi as Poi

class Waypoint:
    next_action_index: int
    lat: float
    lon: float
    altitude: float
    heading: float
    curvesize: float
    rotationdir: RotationDirection
    gimbal: Gimbal
    actions: list[Action]
    speed: float
    poi: Poi
    photo: Photo
    def __init__(self, lat: float, lon: float, alt: float, head: float = ..., curve: float = ..., rot: RotationDirection = ..., speed: float = ...) -> None: ...
    def set_coordinates(self, lat: float, lon: float): ...
    def set_altitude(self, value: float, mode: AltitudeMode = ...): ...
    def set_heading(self, value: float): ...
    def set_curvesize(self, value: float): ...
    def set_rotation_direction(self, value: RotationDirection = ...): ...
    def set_gimbal(self, mode: GimbalMode, pitchangle: float = ...): ...
    def set_speed_ms(self, value: float): ...
    def set_speed_kmh(self, value: float): ...
    def set_poi(self, lat: float, lon: float, alt: float, alt_mode: AltitudeMode = ...): ...
    def set_photo_interval_time(self, seconds: float): ...
    def set_photo_interval_distance(self, meters: float): ...
    def replace_action(self, index: int, action_type: ActionType, param: Union[int, float] = ...): ...
    def set_action(self, action_type: ActionType, param: Union[int, float] = ...) -> bool: ...
    @staticmethod
    def get_header(line_break: str = ...) -> str: ...
    def to_line(self, line_break: Union[str, bool, None] = ...) -> str: ...
    @staticmethod
    def from_line(line: str) -> Waypoint: ...
    @staticmethod
    def from_file(filename: str) -> list['Waypoint']: ...
