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

namespace Pkmnlib.Generated
{
    internal static class Pokemon
    {
        /// <param name="library">const BattleLibrary *</param>
        /// <param name="species">const PokemonSpecies *</param>
        /// <param name="forme">const PokemonForme *</param>
        /// <param name="level">unsigned char</param>
        /// <param name="experience">unsigned int</param>
        /// <param name="uid">unsigned int</param>
        /// <param name="gender">Gender</param>
        /// <param name="coloring">unsigned char</param>
        /// <param name="heldItem">const Item *</param>
        /// <param name="nickname">const char *</param>
        /// <param name="hiddenAbility">bool</param>
        /// <param name="abilityIndex">unsigned char</param>
        /// <param name="moves">const LearnedAttack * *</param>
        /// <param name="moveCount">long unsigned int</param>
        /// <param name="hpIv">unsigned char</param>
        /// <param name="attIv">unsigned char</param>
        /// <param name="defIv">unsigned char</param>
        /// <param name="sAtIv">unsigned char</param>
        /// <param name="sDeIv">unsigned char</param>
        /// <param name="spIv">unsigned char</param>
        /// <param name="hpEv">unsigned char</param>
        /// <param name="attEv">unsigned char</param>
        /// <param name="defEv">unsigned char</param>
        /// <param name="sAtEv">unsigned char</param>
        /// <param name="sDeEv">unsigned char</param>
        /// <param name="spEv">unsigned char</param>
        /// <param name="nature">const Nature *</param>
        /// <returns>Pokemon *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_Construct")]
        internal static extern IntPtr Construct(IntPtr library, IntPtr species, IntPtr forme, byte level, uint experience, uint uid, Gender gender, byte coloring, IntPtr heldItem, IntPtr nickname, byte hiddenAbility, byte abilityIndex, IntPtr moves, ulong moveCount, byte hpIv, byte attIv, byte defIv, byte sAtIv, byte sDeIv, byte spIv, byte hpEv, byte attEv, byte defEv, byte sAtEv, byte sDeEv, byte spEv, IntPtr nature);

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

        /// <param name="p">const Pokemon *</param>
        /// <returns>bool</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_IsShiny")]
        internal static extern byte IsShiny(IntPtr p);

        /// <param name="p">const Pokemon *</param>
        /// <returns>const Nature *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetNature")]
        internal static extern IntPtr GetNature(IntPtr p);

        /// <param name="p">const Pokemon *</param>
        /// <param name="stat">Statistic</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetIndividualValue")]
        internal static extern byte GetIndividualValue(IntPtr p, Statistic stat);

        /// <param name="p">Pokemon *</param>
        /// <param name="stat">Statistic</param>
        /// <param name="value">unsigned char</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_SetIndividualValue")]
        internal static extern void SetIndividualValue(IntPtr p, Statistic stat, byte value);

        /// <param name="p">const Pokemon *</param>
        /// <param name="stat">Statistic</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetEffortValue")]
        internal static extern byte GetEffortValue(IntPtr p, Statistic stat);

        /// <param name="p">Pokemon *</param>
        /// <param name="stat">Statistic</param>
        /// <param name="value">unsigned char</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_SetEffortValue")]
        internal static extern void SetEffortValue(IntPtr p, Statistic stat, byte value);

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

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

        /// <param name="p">Pokemon *</param>
        /// <returns>const char *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetStatusName")]
        internal static extern IntPtr GetStatusName(IntPtr p);

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

        /// <param name="p">Pokemon *</param>
        /// <param name="value">unsigned char</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_SetFriendship")]
        internal static extern void SetFriendship(IntPtr p, byte value);

        /// <param name="p">Pokemon *</param>
        /// <param name="amount">signed char</param>
        /// <returns>void</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_ChangeFriendship")]
        internal static extern void ChangeFriendship(IntPtr p, sbyte amount);

        /// <param name="p">Pokemon *</param>
        /// <param name="species">const PokemonSpecies *</param>
        /// <param name="forme">const PokemonForme *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_Evolve")]
        internal static extern byte Evolve(IntPtr p, IntPtr species, IntPtr forme);

    }
}
