import 'package:flutter/material.dart';
import 'package:segmentation_douglas_peucker_flutter/douglas.dart';

void main() {
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Main(),
        ),
      ),
    );
  }
}

class Main extends StatefulWidget {
  const Main({super.key});

  @override
  State<Main> createState() => _MainState();
}

class _MainState extends State<Main> {
  @override
  Widget build(BuildContext context) {
    // MyLib.runExample();
    Douglas.runExample();

    return const Text('Hello World!');

    // final int sum = nativeLibrary.MathLib_Math_Sum(mathLib, list, outException)

    // final System_Object_t point1 =
    //     nativeLibrary.System_Drawing_Point_Create(200, 400, nullptr);
    // final System_Object_t point2 =
    //     nativeLibrary.System_Drawing_Point_Create(200, 500, nullptr);
    // final System_Object_t point3 =
    //     nativeLibrary.System_Drawing_Point_Create(200, 600, nullptr);
    // final System_Object_t point4 =
    //     nativeLibrary.System_Drawing_Point_Create(200, 700, nullptr);
    // final System_Type_t type = nativeLibrary.System_Drawing_Point_TypeOf();

    // print(DaliPoint.fromPointer(point1));

    // final correctType = nativeLibrary.DNObjectIs(point1, type);

    // print('Correct type: $correctType');

    // final points = nativeLibrary.System_Collections_Generic_List_A1_Create_1(
    //   type,
    //   4,
    //   exception,
    // );

    // DotNetException.handle(exception);

    // final count = nativeLibrary.System_Collections_Generic_List_A1_Count_Get(
    //   points,
    //   type,
    //   exception,
    // );

    // print('Count: $count');

    // DotNetException.handle(exception);

    // return const Text('Hello World!');

    // nativeLibrary.System_Collections_Generic_List_A1_Add(
    //     points, pointType, point1, nullptr);
    // nativeLibrary.System_Collections_Generic_List_A1_Add(
    //     points, nullptr, point2, nullptr);
    // nativeLibrary.System_Collections_Generic_List_A1_Add(
    //     points, nullptr, point3, nullptr);
    // nativeLibrary.System_Collections_Generic_List_A1_Add(
    //     points, nullptr, point4, nullptr);

    // final reduction = nativeLibrary
    //     .DALI_Segmentation_SegmentationDouglasPeucker_DouglasPeuckerReduction(
    //         points.cast(), 1, nullptr);

    // final reducted = <DaliPoint>[];

    // for (var i = 0; i < count; i++) {
    //   final item = nativeLibrary.System_Collections_Generic_List_A1_Item_Get(
    //       reduction, nullptr, i, nullptr);
    //   reducted.add(DaliPoint.fromPointer(item));
    // }

    // nativeLibrary.System_Collections_Generic_List_A1_Destroy(reduction);
    // nativeLibrary.System_Collections_Generic_List_A1_Destroy(points);

    // print(reducted);

    // return Text('Hello World! ${reducted.length}');
  }
}
