#ifndef AC_LIGHTHOUSE_SWITCH_H
#define AC_LIGHTHOUSE_SWITCH_H

#include "types.h"
#include "m_actor.h"
#include "c_keyframe.h"

#ifdef __cplusplus
extern "C" {
#endif

#define aLS_SWITCH_JOINT_NUM 1

enum {
    aLS_NICE_STATUS_OFF,
    aLS_NICE_STATUS_SWITCH_ON,
    aLS_NICE_STATUS_LIGHTHOUSE_PERIOD,

    aLS_NICE_STATUS_NUM
};

typedef struct lighthouse_switch_s {
    xyz_t pos;
    s16 state;
    cKF_SkeletonInfo_R_c keyframe;
    s_xyz work[aLS_SWITCH_JOINT_NUM+1];
    s_xyz morph[aLS_SWITCH_JOINT_NUM+1];
    Mtx mtx[2][aLS_SWITCH_JOINT_NUM+1];
} aLS_switch_c;

#define aLS_POLE_JOINT_NUM 10
#define aLS_POLE_ALL_JOINT_NUM 13

typedef struct lighthouse_pole_s {
    xyz_t pos;
    f32 speed;
    s16 state;
    s16 timer;
    s16 off_timer;
    int keyframe_state;
    int _1C;
    cKF_SkeletonInfo_R_c keyframe;
    s_xyz work[aLS_POLE_JOINT_NUM+1];
    s_xyz morph[aLS_POLE_JOINT_NUM+1];
    Mtx mtx[2][aLS_POLE_ALL_JOINT_NUM+1];
} aLS_pole_c;

typedef struct lighthouse_switch_actor_s LIGHTHOUSE_SWITCH_ACTOR;

struct lighthouse_switch_actor_s {
    ACTOR actor_class;
    aLS_switch_c ls_switch;
    aLS_pole_c ls_pole;
    s16 turning_on;
};

extern ACTOR_PROFILE Lighthouse_Switch_Profile;

#ifdef __cplusplus
}
#endif

#endif
