import 'dart:io';
import 'dart:isolate';
import 'package:angel/angel.dart';
import 'package:angel_diagnostics/angel_diagnostics.dart';
import 'package:intl/intl.dart';

startServer(args, {bool clustered: false, SendPort sendPort}) {
  return () async {
    var app = await createServer();
    var dateFormat = new DateFormat("y-MM-dd");
    var logFile = new File("logs/${dateFormat.format(new DateTime.now())}.txt");
    InternetAddress host;
    int port;

    if (!clustered) {
      host = new InternetAddress(app.properties['host']);
      port = app.properties['port'];
    } else {
      host = InternetAddress.LOOPBACK_IP_V4;
      port = 0;
    }

    await app.configure(logRequests(logFile));
    var server = await app.startServer(host, port);

    if (sendPort == null) {
      print('Listening at http://${server.address.address}:${server.port}');
    } else
      sendPort?.send([server.address.address, server.port]);
  };
}

onError(error, [StackTrace stackTrace]) {
  stderr.writeln("Unhandled error occurred: $error");
  if (stackTrace != null) {
    stderr.writeln(stackTrace);
  }
}