import 'dart:math';

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:terepi_seged/pages/rtcm_test/presentation/controllers/rtcm_test_controller.dart';

class RtcmTestView extends GetView<RtcmTestController> {
  const RtcmTestView({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
        color: Colors.white,
        child: Scaffold(
            extendBody: true,
            backgroundColor: Colors.black.withOpacity(0.05),
            appBar: AppBar(
              elevation: 0.0,
              title: const Text('RtcmTest'),
              leading: IconButton(
                icon: const Icon(Icons.arrow_back_ios),
                color: Colors.white,
                onPressed: () {
                  Get.back();
                },
              ),
            ),
            body: Column(
              children: [
                const Center(
                  child: Text("RTCM teszt view"),
                ),
                ListTile(
                  title: Text(controller.gpsName),
                  subtitle: Obx(() => controller.gpsIsConnected.value
                      ? const Text("Connected",
                          style: TextStyle(color: Colors.green))
                      : const Text(
                          "Disconnected",
                          style: TextStyle(color: Colors.red),
                        )),
                  trailing: Obx(() => ElevatedButton(
                        child: Text(controller.gpsIsConnected.value
                            ? "Disconnect"
                            : "Connect"),
                        onPressed: () {
                          if (controller.gpsIsConnected.value) {
                            controller.disconnectFromGps();
                          } else {
                            controller.connectToGps();
                          }
                        },
                      )),
                ),
                ListTile(
                  title: const Text("NTRIP Server (KOVARIK)"),
                  subtitle: Obx(() => controller.ntripIsConnected.value
                      ? const Text("Connected",
                          style: TextStyle(color: Colors.green))
                      : const Text(
                          "Disconnected",
                          style: TextStyle(color: Colors.red),
                        )),
                  trailing: Obx(() => ElevatedButton(
                        child: Text(controller.ntripIsConnected.value
                            ? "Disconnect"
                            : "Connect"),
                        onPressed: () {
                          if (controller.ntripIsConnected.value) {
                            controller.disconnectFromNtripServer();
                          } else {
                            controller.connectToNtripServer();
                          }
                        },
                      )),
                ),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "Received ${controller.gpsReceivedData} byte(s) from GNSS device")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "Received ${controller.ntripReceivedData} byte(s) from ntrip server ${controller.ntripDataPacketNumbers}")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "GPS quality -> ${controller.getGpsQualityIndicator(quality: controller.gpsQuality.value)} ")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "GpsDateTime -> ${controller.gpsDateTime} (UTC)")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            'Lat: ${controller.latDegree.value}°${controller.latMin.value.toString().padLeft(2, '0')}\'${controller.formatWgs84Sec.format(controller.latSec.value)}" - Long: ${controller.longDegree.value}°${controller.longMin.value.toString().padLeft(2, '0')}\'${controller.formatWgs84Sec.format(controller.longSec.value)}"')))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "EovX: ${controller.formatEov.format(controller.eov.value.Y)} - EovY: ${controller.formatEov.format(controller.eov.value.X)}")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "Altitude -> ${controller.gpsAltitude} (m)")))),
                Padding(
                    padding: const EdgeInsets.only(top: 10),
                    child: Center(
                        child: Obx(() => Text(
                            "Hor. error: ${max(controller.gpsLatitudeError.value, controller.gpsLongitudeError.value)} (m) - Vert. error: ${controller.gpsAltitudeError} (m)"))))
              ],
            )));
  }
}
