//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using Ajuna.NetApi.Model.Types.Base;
using Ajuna.ServiceLayer.Attributes;
using Bajun.Network.NET.RestService.Generated.Storage;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;


namespace Bajun.Network.NET.RestService.Generated.Controller
{
    
    
    /// <summary>
    /// NftTransferController controller to access storages.
    /// </summary>
    [ApiController()]
    [Route("[controller]")]
    public sealed class NftTransferController : ControllerBase
    {
        
        private INftTransferStorage _nftTransferStorage;
        
        /// <summary>
        /// NftTransferController constructor.
        /// </summary>
        public NftTransferController(INftTransferStorage nftTransferStorage)
        {
            _nftTransferStorage = nftTransferStorage;
        }
        
        /// <summary>
        /// >> Organizer
        /// </summary>
        [HttpGet("Organizer")]
        [ProducesResponseType(typeof(Bajun.Network.NET.NetApiExt.Generated.Model.sp_core.crypto.AccountId32), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "OrganizerParams")]
        public IActionResult GetOrganizer()
        {
            return this.Ok(_nftTransferStorage.GetOrganizer());
        }
        
        /// <summary>
        /// >> LockedState
        /// </summary>
        [HttpGet("LockedState")]
        [ProducesResponseType(typeof(Bajun.Network.NET.NetApiExt.Generated.Model.pallet_ajuna_nft_transfer.pallet.EnumPalletLockedState), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "LockedStateParams")]
        public IActionResult GetLockedState()
        {
            return this.Ok(_nftTransferStorage.GetLockedState());
        }
        
        /// <summary>
        /// >> NextItemId
        /// </summary>
        [HttpGet("NextItemId")]
        [ProducesResponseType(typeof(Ajuna.NetApi.Model.Types.Primitive.U128), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "NextItemIdParams", typeof(Ajuna.NetApi.Model.Types.Primitive.U32))]
        public IActionResult GetNextItemId(string key)
        {
            return this.Ok(_nftTransferStorage.GetNextItemId(key));
        }
        
        /// <summary>
        /// >> LockItemStatus
        /// </summary>
        [HttpGet("LockItemStatus")]
        [ProducesResponseType(typeof(Bajun.Network.NET.NetApiExt.Generated.Model.pallet_ajuna_nft_transfer.pallet.EnumNftStatus), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "LockItemStatusParams", typeof(Ajuna.NetApi.Model.Types.Base.BaseTuple<Ajuna.NetApi.Model.Types.Primitive.U32, Ajuna.NetApi.Model.Types.Primitive.U128>))]
        public IActionResult GetLockItemStatus(string key)
        {
            return this.Ok(_nftTransferStorage.GetLockItemStatus(key));
        }
        
        /// <summary>
        /// >> HoldingAccount
        /// </summary>
        [HttpGet("HoldingAccount")]
        [ProducesResponseType(typeof(Bajun.Network.NET.NetApiExt.Generated.Model.sp_core.crypto.AccountId32), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "HoldingAccountParams")]
        public IActionResult GetHoldingAccount()
        {
            return this.Ok(_nftTransferStorage.GetHoldingAccount());
        }
        
        /// <summary>
        /// >> NftClaimants
        /// </summary>
        [HttpGet("NftClaimants")]
        [ProducesResponseType(typeof(Bajun.Network.NET.NetApiExt.Generated.Model.sp_core.crypto.AccountId32), 200)]
        [StorageKeyBuilder(typeof(Bajun.Network.NET.NetApiExt.Generated.Storage.NftTransferStorage), "NftClaimantsParams", typeof(Ajuna.NetApi.Model.Types.Base.BaseTuple<Ajuna.NetApi.Model.Types.Primitive.U32, Ajuna.NetApi.Model.Types.Primitive.U128>))]
        public IActionResult GetNftClaimants(string key)
        {
            return this.Ok(_nftTransferStorage.GetNftClaimants(key));
        }
    }
}
