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

namespace Pkmnlib.Generated
{
    internal static class EvolutionData
    {
        /// <param name="level">unsigned char</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateLevelEvolution")]
        internal static extern IntPtr CreateLevelEvolution(byte level, IntPtr into);

        /// <param name="friendship">unsigned char</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateFriendshipEvolution")]
        internal static extern IntPtr CreateFriendshipEvolution(byte friendship, IntPtr into);

        /// <param name="move">const MoveData *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateKnownMoveEvolution")]
        internal static extern IntPtr CreateKnownMoveEvolution(IntPtr move, IntPtr into);

        /// <param name="location">const char *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateLocationEvolution")]
        internal static extern IntPtr CreateLocationEvolution(IntPtr location, IntPtr into);

        /// <param name="time">TimeOfDay</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTimeEvolution")]
        internal static extern IntPtr CreateTimeEvolution(TimeOfDay time, IntPtr into);

        /// <param name="item">const Item *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemEvolution")]
        internal static extern IntPtr CreateItemEvolution(IntPtr item, IntPtr into);

        /// <param name="gender">Gender</param>
        /// <param name="level">unsigned char</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateGenderBasedEvolution")]
        internal static extern IntPtr CreateGenderBasedEvolution(Gender gender, byte level, IntPtr into);

        /// <param name="item">const Item *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemUseEvolution")]
        internal static extern IntPtr CreateItemUseEvolution(IntPtr item, IntPtr into);

        /// <param name="item">const Item *</param>
        /// <param name="gender">Gender</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemUseWithGenderEvolution")]
        internal static extern IntPtr CreateItemUseWithGenderEvolution(IntPtr item, Gender gender, IntPtr into);

        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeEvolution")]
        internal static extern IntPtr CreateTradeEvolution(IntPtr into);

        /// <param name="item">const Item *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeWithItemEvolution")]
        internal static extern IntPtr CreateTradeWithItemEvolution(IntPtr item, IntPtr into);

        /// <param name="traded">const PokemonSpecies *</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeWithSpeciesEvolution")]
        internal static extern IntPtr CreateTradeWithSpeciesEvolution(IntPtr traded, IntPtr into);

        /// <param name="data">const EffectParameter * *</param>
        /// <param name="dataLength">long unsigned int</param>
        /// <param name="into">const PokemonSpecies *</param>
        /// <returns>const EvolutionData *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateCustomEvolution")]
        internal static extern IntPtr CreateCustomEvolution(IntPtr data, ulong dataLength, IntPtr into);

        /// <param name="data">const EvolutionData *</param>
        /// <returns>EvolutionMethod</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetMethod")]
        internal static extern EvolutionMethod GetMethod(IntPtr data);

        /// <param name="data">const EvolutionData *</param>
        /// <returns>const PokemonSpecies *</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetNewSpecies")]
        internal static extern IntPtr GetNewSpecies(IntPtr data);

        /// <param name="data">const EvolutionData *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libpkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetDataCount")]
        internal static extern ulong GetDataCount(IntPtr data);

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

    }
}
