import 'dart:convert';
import 'dart:developer';
import 'package:http/http.dart' as http;

import 'package:crypto/crypto.dart';
import 'package:fast_rsa/fast_rsa.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import 'package:share_plus/share_plus.dart';

import '../../../model/endpointData.dart';
import '../../../widget/ListItem.dart';
import '../../../widget/debug/debugTile.dart';
import '../../settings/settings.dart';
import 'gradeAverages/gradeAverage.dart';
import 'holidays/holidays.dart';
import 'message/message.dart';
import 'roomplan/roomplan.dart';

class Overhang extends StatelessWidget {
  const Overhang({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: const Text("Mehr"),
        actions: [
          IconButton(onPressed: () => PersistentNavBarNavigator.pushNewScreen(context, screen: const Settings(), withNavBar: false), icon: const Icon(Icons.settings))
        ],
      ),
      body: ListView(
        children: [
          const ListItemNavigator(icon: Icons.newspaper, text: "Marianum Message", target: Message()),
          const ListItemNavigator(icon: Icons.room, text: "Raumplan", target: Roomplan()),
          const ListItemNavigator(icon: Icons.calculate, text: "Notendurschnittsrechner", target: GradeAverage()),
          const ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Holidays()),
          ListTile(
            leading: const Icon(Icons.share_outlined),
            title: const Text("Teile die App mit deiner Klasse"),
            onTap: () {
              Share.share( // TODO ipad needs position argument
                subject: "App Teilen",
                "Hol dir die inoffizielle App für's Marianum:"
                "\n\nAndroid: https://play.google.com/store/apps/details?id=eu.mhsl.marianum.mobile.client "
                "\nApple: https://apps.apple.com/us/app/marianum-fulda/id6458789560 "
                "\n\nViel Spaß!"
              );
            },
          ),
          DebugTile(context, onlyInDebug: true).callback(onTab: () async {
            log("Starting");
            log("Generate keys");
            final rsaKey = await RSA.generate(2048);
            final devicePrivateKey = rsaKey.privateKey.toString();
            final devicePublicKey = rsaKey.publicKey.toString();
            log("Private: \n$devicePrivateKey");
            log("Public: \n$devicePublicKey");
            final pushToken = await FirebaseMessaging.instance.getToken();
            log("PushToken: $pushToken}");
            final pushTokenHash = sha512.convert(utf8.encode(pushToken!));
            log("PushTokenHash: $pushTokenHash");

            final requestMap = {
              "format": "json",
              "pushTokenHash": pushTokenHash.toString(),
              "devicePublicKey": devicePublicKey.toString(),
              "proxyServer": "https://push-notifications.nextcloud.com/devices"
            };

            log(jsonEncode(requestMap));
            http.post(
              //${AccountData().buildHttpAuthString()}@
              Uri.parse("https://${EndpointData().nextcloud().full()}/ocs/v2.php/apps/notifications/api/v2/push"),
              headers: {
                "OCS-APIRequest": "true",
                "Content-Type": "application/json",
                "Accept": "application/json",
                "Authorization": "Bearer Fv3g7g9jW91FXNjZLaJmyprClfy8pX1jEM3hJGbXjPEFcx4oGIEVcpwEnuT4mPs39D9xT063"
              },
              body: jsonEncode(requestMap),
            ).then((response) {
              log("Response: ${response.statusCode}\n${response.body}");
            });
          }),
        ],
      ),
    );
  }
}