import 'package:flutter/material.dart';
import 'package:logging/logging.dart';

enum Flavor { UNSET, DEV, STAGING, PRODUCTION, LOCAL }
const FlavorNames = ["Unset", "Development", "Staging", "Production", "Local"];

class Config {
  static Config _instance = Config(
      flavor: Flavor.UNSET,
      apiURL: "",
      bucketName: "",
      reportProjectID: "",
      reportURL: "");

  final Flavor flavor;
  final String name;
  final Color color;
  final String apiURL;
  final String reportURL;
  final Level level;
  final String reportProjectID;
  final String bucketName;

  factory Config(
      {required Flavor flavor,
      required String apiURL,
      required String reportURL,
      required String reportProjectID,
      required String bucketName,
      Color color: Colors.blue,
      Level level: Level.SEVERE}) {
    _instance = Config._internal(flavor, FlavorNames[flavor.index], color,
        apiURL, reportURL, level, reportProjectID, bucketName);

    Logger.root.level = level;
    Logger.root.onRecord.listen((record) {
      print(
          '${record.level.name}: ${record.time}: ${record.loggerName}: ${record.message}');
    });

    return _instance;
  }

  Config._internal(this.flavor, this.name, this.color, this.apiURL,
      this.reportURL, this.level, this.reportProjectID, this.bucketName);

  static Config get instance {
    return _instance;
  }

  static bool isProduction() => _instance.flavor == Flavor.PRODUCTION;
  static bool isDevelopment() => _instance.flavor == Flavor.DEV;
  static bool isStaging() => _instance.flavor == Flavor.STAGING;
  static bool isLocal() => _instance.flavor == Flavor.LOCAL;
}
