import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:spotifyplaylistgenerator/models/settings/settings_global.dart';

class Activity {
  Activity({
    // Settings
    required this.globalSettings,

    // State
    this.isConnected = false,

    // Base data
    this.userId = '',

    // Activity data
    this.token = 1,
  });

  // Settings
  final GlobalSettings globalSettings;

  // State
  bool isConnected;

  // Base data
  String userId;

  // Activity data
  int token;

  factory Activity.createNull() {
    return Activity(
      // Settings
      globalSettings: GlobalSettings.createDefault(),
      // Base data
      userId: '',
    );
  }

  factory Activity.createNew({
    GlobalSettings? globalSettings,
  }) {
    final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();

    return Activity(
      // Settings
      globalSettings: newGlobalSettings,
      // State
      isConnected: false,
      // Base data
      userId: '',
    );
  }

  void dump() {
    printlog('');
    printlog('## Current activity dump:');
    printlog('');
    printlog('$Activity:');
    printlog('  Settings');
    globalSettings.dump();
    printlog('  State');
    printlog('    isConnected: $isConnected');
    printlog('  Base data');
    printlog('    userId: $userId');
    printlog('  Activity data');
    printlog('    token: $token');
    printlog('');
  }

  @override
  String toString() {
    return '$Activity(${toJson()})';
  }

  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
      // Settings
      'globalSettings': globalSettings.toJson(),
      // State
      'isConnected': isConnected,
      // Base data
      'userId': userId,
      // Activity data
      'token': token,
    };
  }
}