import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:texture_rgba_renderer/texture_rgba_renderer.dart';

import '../../common.dart';
import './platform_model.dart';

class RenderTexture {
  final RxInt textureId = RxInt(-1);
  int _textureKey = -1;
  SessionID? _sessionId;
  final useTextureRender = bind.mainUseTextureRender();

  final textureRenderer = TextureRgbaRenderer();

  RenderTexture();

  create(SessionID sessionId) {
    if (useTextureRender) {
      _textureKey = bind.getNextTextureKey();
      _sessionId = sessionId;

      textureRenderer.createTexture(_textureKey).then((id) async {
        debugPrint("id: $id, texture_key: $_textureKey");
        if (id != -1) {
          final ptr = await textureRenderer.getTexturePtr(_textureKey);
          platformFFI.registerTexture(sessionId, ptr);
          textureId.value = id;
        }
      });
    }
  }

  destroy() async {
    if (useTextureRender && _textureKey != -1 && _sessionId != null) {
      platformFFI.registerTexture(_sessionId!, 0);
      await textureRenderer.closeTexture(_textureKey);
      _textureKey = -1;
    }
  }

  static final RenderTexture instance = RenderTexture();
}

// Global instance for separate texture
final renderTexture = RenderTexture.instance;