// app.dart
import 'package:flutter/material.dart';
import 'screens/home.dart';
import 'package:flutter/services.dart';

import 'dart:async';
import 'dart:developer';

import 'package:uni_links/uni_links.dart';

class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  StreamSubscription _sub;

  String _appMode = "app";

  // Url of the app which invoked OAuth
  String _invokerURL;

  @override
  initState() {
    super.initState();
    initUniLinks();
  }

  @override
  dispose() {
    if (_sub != null) _sub.cancel();
    super.dispose();
  }

  Future<Null> initUniLinks() async {
    Uri initialUri;

    try {
      initialUri = await getInitialUri();
    } on PlatformException {
      initialUri = null;
    } on FormatException {
      initialUri = null;
    }
    updateAppMode(initialUri);

    _sub = getUriLinksStream().listen((Uri uri) {
      updateAppMode(uri);
    }, onError: (err) {
      log('got err: $err');
    });
  }

  updateAppMode(Uri uri) {
    log("Uri ${uri}");
    if (uri?.path == "/oauth2") {
      setState(() {
        _appMode = "oauth";
        _invokerURL = uri.queryParameters["callbackUrl"];
      });
    } else {
      setState(() {
        _appMode = "app";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Web Views',
      theme: ThemeData(
          primarySwatch: Colors.blue,
          fontFamily: "Arial",
          textTheme: TextTheme(
              button: TextStyle(color: Colors.white, fontSize: 18.0),
              title: TextStyle(color: Colors.red))),
      home: new Scaffold(
        appBar: new AppBar(),
        body: Home(
          mode: _appMode,
          invokerURL: _invokerURL
        )
      ),
    );
  }
}