using UnityEngine;

using UnityEngine.Purchasing;


public class IAPManager : MonoBehaviour, IStoreListener

{

    [Header("Product ID")]

    public readonly string gold500_id = "gold500";

    public readonly string gold1000_id = "com.games.srpg.gold1000";


    [Header("Cache")]

    private IStoreController storeController; // 구매 과정을 제어하는 함수 제공자

    private IExtensionProvider storeExtensionProvider; // 여러 플랫폼을 위한 확장 처리 제공자


    private void Start()

    {

        InitUnityIAP(); // Start 문에서 초기화 필수

    }


    /* Unity IAP를 초기화하는 함수 */

    private void InitUnityIAP()

    {

        ConfigurationBuilder builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());


        /* 구글 플레이 상품들 추가 */

        builder.AddProduct(gold500_id, ProductType.Consumable);

        builder.AddProduct(gold1000_id, ProductType.Consumable);


        UnityPurchasing.Initialize(this, builder);

    }


    /* 구매하는 함수 */

    public void Purchase(string productId)

    {

        Product product = storeController.products.WithID(productId); // 상품 정의


        if (product != null && product.availableToPurchase) // 상품이 존재하면서 구매 가능하면

        {

            storeController.InitiatePurchase(product); // 구매가 가능하면 진행

        }

        else // 상품이 존재하지 않거나 구매 불가능하면

        {

            Debug.Log("상품이 없거나 현재 구매가 불가능합니다");

        }

    }


    #region Interface

    /* 초기화 성공 시 실행되는 함수 */

    public void OnInitialized(IStoreController controller, IExtensionProvider extension)

    {

        Debug.Log("초기화에 성공했습니다");


        storeController = controller;

        storeExtensionProvider = extension;

    }


    /* 초기화 실패 시 실행되는 함수 */

    public void OnInitializeFailed(InitializationFailureReason error)

    {

        Debug.Log("초기화에 실패했습니다");

    }


    public void OnInitializeFailed(InitializationFailureReason error, string message)

    {

        Debug.Log($"초기화에 실패했습니다. 이유: {error.ToString()}. 메시지: {message}");

    }


    /* 구매에 실패했을 때 실행되는 함수 */

    public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)

    {

        Debug.Log("구매에 실패했습니다");

    }


    /* 구매를 처리하는 함수 */

    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)

    {

        Debug.Log("구매에 성공했습니다");


        if (args.purchasedProduct.definition.id == gold500_id)

        {

            /* test_id 구매 처리 */

            point.gold += 500;

        }

        else if (args.purchasedProduct.definition.id == gold1000_id)

        {

            point.gold += 1000;

        }


        return PurchaseProcessingResult.Complete;

    }

    #endregion

}


product id 헤더에서

"com.games.srpg.gold1000"처럼 개발자 계정과 게임 이름이 전부 들어간 형식의 값을 넣어야함? 아니면
"gold1000"같이 상품 자체의 아이디만 들어가야함?