// AUTOMATICALLY GENERATED, DO NOT EDIT
using System;
using System.Runtime.InteropServices;

namespace Pkmnlib.Generated
{
    internal static class PokemonSpecies
    {
        /// <param name="out">const PokemonSpecies * &</param>
        /// <param name="id">unsigned short</param>
        /// <param name="name">const char *</param>
        /// <param name="defaultForme">const PokemonForme *</param>
        /// <param name="genderRatio">float</param>
        /// <param name="growthRate">const char *</param>
        /// <param name="captureRate">unsigned char</param>
        /// <param name="baseHappiness">unsigned char</param>
        /// <param name="eggGroupsRaw">const const char * *</param>
        /// <param name="eggGroupsLength">long unsigned int</param>
        /// <param name="flags">const char * *</param>
        /// <param name="flagsCount">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_Construct")]
        internal static extern byte Construct(ref IntPtr @out, ushort id, IntPtr name, IntPtr defaultForme, float genderRatio, IntPtr growthRate, byte captureRate, byte baseHappiness, IntPtr eggGroupsRaw, ulong eggGroupsLength, IntPtr flags, ulong flagsCount);

        /// <param name="p">const PokemonSpecies *</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_Destruct")]
        internal static extern void Destruct(IntPtr p);

        /// <param name="p">const PokemonSpecies *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetBaseHappiness")]
        internal static extern byte GetBaseHappiness(IntPtr p);

        /// <param name="p">PokemonSpecies *</param>
        /// <param name="evo">EvolutionData *</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_AddEvolution")]
        internal static extern void AddEvolution(IntPtr p, IntPtr evo);

        /// <param name="p">const PokemonSpecies *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolutionCount")]
        internal static extern ulong GetEvolutionCount(IntPtr p);

        /// <param name="p">const PokemonSpecies *</param>
        /// <param name="index">long unsigned int</param>
        /// <param name="out">const EvolutionData * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolution")]
        internal static extern byte GetEvolution(IntPtr p, ulong index, ref IntPtr @out);

        /// <param name="p">const PokemonSpecies *</param>
        /// <param name="out">const const EvolutionData * * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolutions")]
        internal static extern byte GetEvolutions(IntPtr p, ref IntPtr @out);

        /// <param name="p">const PokemonSpecies *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEggGroupCount")]
        internal static extern ulong GetEggGroupCount(IntPtr p);

        /// <param name="p">const PokemonSpecies *</param>
        /// <param name="index">long unsigned int</param>
        /// <returns>const char *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEggGroup")]
        internal static extern IntPtr GetEggGroup(IntPtr p, ulong index);

    }
}
