use serde::Deserialize;

#[derive(Deserialize, PartialEq, Debug, Copy, Clone)]
pub enum EntityType {
    AdsorptionFoundation,
    AdviseItem,
    AiAlertNotifier,
    AiGearController,
    AiMovementGear,
    AirPassage,
    AiSceneItem,
    Animal,
    Animal2,
    AnnunciatorCenter,
    AnnunciatorWire,
    AreaOccupation,
    Audio,
    AudioBox,
    BatchBulletCaster,
    BeamCastBullet,
    BeamCaster,
    BeamCrystal,
    BeamDeliver,
    BeamReceiver,
    BondageTrap,
    BuffConsumer,
    BuffProducer,
    BurstCrystalFoundation,
    Chair,
    Chair2,
    ChallengeInteract,
    Chessboard,
    Chessman,
    ClientTrigger,
    Collect,
    Collect2,
    Collect3,
    CollectAnimal,
    CollectAnimalPart,
    CombatAnimal,
    CombatAnimal2,
    CombinedVisibleGroup,
    ControlConnector,
    ConveyorBelt,
    CookTool,
    CurveControlDestructible,
    CustomAoiEditor,
    Destructible,
    DestructibleControl,
    DestructibleExploreInteractor,
    DestructibleSceneBullet,
    DestructibleTrigger,
    Disc,
    Drop,
    DungeonEntry,
    DynamicPortalCreater,
    EffectArea,
    EnrichmentArea,
    EntityBatchRefresh,
    EntityBundle,
    EntityList,
    EntityPackage,
    ExploreSkillInteractor,
    FishingBoat,
    FollowShooter,
    FollowShooter2,
    FollowTrack,
    FollowTrackFoundation,
    Gramophone,
    GravityFlip,
    GroupAi,
    HackingTypeFollowShooter,
    HitConditionListener,
    HookLockPoint,
    HookSoundBox,
    HookWithRange,
    HorseBettingTuanzi,
    InhaledItem,
    InteractFoundation,
    InteractFoundationWithSceneItemAttribute,
    InteractGear,
    InteractGearGroup,
    InteractiveConditionListener,
    Item,
    ItemFoundation,
    JigsawFoundation,
    JigsawItem,
    KiteHook,
    LevelPlay,
    LevelPlayReward,
    LevelQteTrigger,
    LevelSeqTrigger,
    LevitateMagnet,
    LifePointCenter,
    Lift,
    Lift2,
    LightDeliver,
    LocationSafety,
    Monitor,
    Monster,
    MonsterGachaBase,
    MonsterGachaItem,
    MoveableTrigger,
    MusicStand,
    NoRenderPortal,
    Npc,
    Npc2,
    PasserbyNpc,
    PerformanceOptimizer,
    PhotoTarget,
    PhysicsSwing,
    Portal,
    Position,
    ProgressBarController,
    ProgressBarControllerWithAttribute,
    PullingObject,
    Range,
    RangeTriggerTargetGear,
    ReboundPlateGear,
    RefreshGroup,
    RenderSpecifiedRange,
    RenderSpecifiedRange2,
    Resurrection,
    RewardNpc,
    RollingFireball,
    Rotator,
    SceneAura,
    SceneBullet,
    SceneBulletCanHit,
    SceneBulletTrigger,
    SceneBulletWithMovement,
    SceneItemStateHint,
    SimpleInteract,
    SimpleNPc,
    SkyboxTrigger,
    SlideRail,
    Slots,
    SoundBox,
    SpawnMonster,
    SpawnPasserbyNpc,
    Spline,
    SplineRange,
    SummonGongduolaPoint,
    StateSceneItem,
    StateTrigger,
    StatueFoundation,
    SuiGuangHook,
    TargetGear,
    TargetGear2,
    TargetGearGroup,
    TargetGearGroup2,
    TargetGearPro,
    TargetGearWithLevelPrefabPerform,
    TeleControl,
    TeleControl3,
    TeleControl4,
    TeleControlGroup,
    Teleporter,
    TemplateEntitySpawner,
    TemporaryTeleporter,
    TimedStrikeDevice,
    TimelineTrackController,
    TimeScaledHook,
    TimeStop,
    Trample,
    Trample2,
    Trample3,
    TrampleWithSceneItemAttribute,
    TreasureBox,
    Trigger,
    TriggerConditionListener,
    TuanziNpc,
    TuningStand,
    TurntableController,
    VacuumCleaner,
    VarManager,
    Vehicle,
    Vehicle2,
    VehicleNpc,
    VehicleSceneItem,
    VisibleTrigger,
    Vision,
    VisionItem,
    VisionTreasureBox,
    WalkingPatternController,
    WaterCollection,
    WaterSpout,
    Weapon,
    WindSource,
}

#[derive(Deserialize, PartialEq, Debug, Copy, Clone)]
pub enum EntityLogic {
    Item,
    Animal,
    Monster,
    Vehicle,
    Npc,
    Vision,
    ClientOnly,
    ServerOnly,
    Custom,
}

#[derive(Deserialize)]
#[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))]
#[serde(rename_all = "PascalCase")]
pub struct BlueprintConfigData {
    pub id: i32,
    pub blueprint_type: String,
    pub entity_type: EntityType,
    pub entity_logic: EntityLogic,
    pub model_id: i32,
    pub half_height: i32,
    pub track_height: i32,
}