import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; import 'theme_provider.dart'; import 'package:provider/provider.dart'; import 'User.dart' as User; class Category { Category(this.category_id, this.name, this.color, this.productive); String category_id; String name; String color; bool productive; static String colCatId = "category_id"; static String colName = "name"; static String colColor = "color"; static String colProductive = "productive"; } class TaskType { TaskType(this.id, this.name, this.category, {this.relatedProject, this.cat}); String id; String name; String category; Category? cat; Project? relatedProject; static String colId = "id"; static String colName = "name"; static String colCategory = "category_id"; static String colRelatedProject = "related_project"; static String getDisplayName(TaskType taskType) { return (taskType.name + ((taskType.relatedProject != null) ? ' [${taskType.relatedProject!.name}]' : '')); } } class Activity { Activity(this.taskType, this.startTime, this.endTime, {this.metadata, DateTime? tEndTime, DateTime? tStartTime}) { trueStartTime = tStartTime ?? startTime; trueEndTime = tEndTime ?? endTime; } late DateTime trueStartTime; late DateTime trueEndTime; TaskType taskType; DateTime startTime; DateTime endTime; String? metadata; Activity.fromJson(Map json) : taskType = json['taskType'], startTime = json['sTime'], endTime = json['eTime']; Map toJson() => {'taskType': taskType, 'sTime': startTime, 'eTime': endTime}; static String colType = "type"; static String colStartTime = "s_time"; static String colEndTime = "e_time"; static String colMetadata = "metadata"; } class InitialData { static List getTaskTypes(String username) { List tasks = [ TaskType(username + 'Sleep', 'Sleep', 'Relax'), TaskType(username + 'Physics', 'Physics', 'Study'), TaskType(username + 'History', 'History', 'Study'), TaskType(username + 'Football', 'Football', 'Play'), TaskType(username + 'At work', 'At work', 'Work'), TaskType(username + 'Chores', 'Chores', 'Daily Activities'), TaskType(username + 'Eat', 'Eat', 'Daily Activities'), TaskType(username + 'Hang out', 'Hang out', 'Social') ]; return tasks; } static List getCategories(String username) { List cats = [ Category(username + 'Relax', 'Relax', '#555555', false), Category( username + 'Daily Activities', 'Daily Activities', '#009955', false), Category(username + 'Study', 'Study', '#00FF00', true), Category(username + 'Play', 'Play', '#FF0000', false), Category(username + 'Work', 'Work', '#00AAFF', true), Category(username + 'Social', 'Social', '#00AAAA', false) ]; return cats; } } class Queries { Queries(this.link, this.data); String link; String data; static String colLink = "file"; static String colData = "data"; } class Project { Project(this.name, this.category, this.steps, this.eta, this.deadline, {this.cat}); String name; String getName() => name.replaceAll(User.username, ""); String category; Category? cat; List steps; int? eta; DateTime deadline; static String colName = "name"; static String colCat = "category_id"; static String colSteps = "steps"; static String colDeadline = "deadline"; static String colEta = "eta"; } class ProjectStep { ProjectStep(this.stepName, this.eta, this.progress); ProjectStep.fromJson(Map json) : stepName = json['name'], eta = json['eta'], progress = json['progress'], finishedDate = (json['finishedDate'] != null) ? DateTime.parse(json['finishedDate']) : null; Map toJson() => { 'name': stepName, 'eta': eta, 'progress': progress, if (finishedDate != null) 'finishedDate': finishedDate.toString() }; String stepName; int eta; int progress; DateTime? finishedDate; } class Journal { Journal(this.id, this.day, {this.title, this.description}); String id; DateTime day; String? title; String? description; static String colTitle = 'Title'; static String colDescription = 'Desc'; } class Todo { Todo(this.id, this.category, this.metadata, this.dueDate, {this.notificationTime, this.task}); String id; String category; TaskType? task; String metadata; DateTime dueDate; DateTime? notificationTime; static String colCat = 'category'; static String colMetadata = 'metadata'; static String colDueDate = 'due_date'; static String colNotificationTime = 'notification_time'; } class Settings { static Future UUID() async { final prefs = await SharedPreferences.getInstance(); if (prefs.containsKey('uuid')) { return await Future.value(prefs.getString('uuid')); } else { var uuid = Uuid(); String _uuid = uuid.v4(); // if(Platform.isAndroid){ // // } await prefs.setString('uuid', _uuid); return Future.value(_uuid); } } static Future setTheme(int value) async { final prefs = await SharedPreferences.getInstance(); await prefs.setInt("theme", value); } static String notification_key = "notification_interval"; static String adaptive_notification_key = "adaptive_notification"; static String untracked_unprod_key = "untracked_unproductive"; static String auto_log_key = "auto_log"; static Future getNotificationInterval() async { final prefs = await SharedPreferences.getInstance(); int _value = 1; if (prefs.containsKey(notification_key)) { _value = await prefs.getInt(notification_key) ?? 1; } else { prefs.setInt(notification_key, _value); } return _value; } static Future setNotificationInterval(int value) async { final prefs = await SharedPreferences.getInstance(); prefs.setInt(notification_key, value); } static List notificationOptions = [ 'Off', '1 hour', '2 hour', '3 hour', '4 hour', '5 hour', '6 hour' ]; static bool adaptiveNotificationAvailable() { List dates = []; if (User.activities.length < 10) { return false; } else { for (var element in User.activities) { String thisDate = DateFormat("MM/dd").format(element.startTime); if (!dates.contains(thisDate)) { dates.add(thisDate); } } } return (dates.length > 2); } static Future getAdaptiveNotification() async { final prefs = await SharedPreferences.getInstance(); bool _value = true; if (prefs.containsKey(notification_key)) { _value = await prefs.getBool(adaptive_notification_key) ?? true; } else { prefs.setBool(adaptive_notification_key, _value); } return _value; } static Future setAdaptiveNotification(bool value) async { final prefs = await SharedPreferences.getInstance(); prefs.setBool(adaptive_notification_key, value); } static Future getUntrackedUnproductive() async { final prefs = await SharedPreferences.getInstance(); bool _value = true; if (prefs.containsKey(untracked_unprod_key)) { _value = await prefs.getBool(untracked_unprod_key) ?? true; } else { prefs.setBool(untracked_unprod_key, _value); } return _value; } static Future getAutoLog() async { final prefs = await SharedPreferences.getInstance(); bool _value = true; if (prefs.containsKey(auto_log_key)) { _value = await prefs.getBool(auto_log_key) ?? true; } else { prefs.setBool(auto_log_key, _value); } return _value; } static Future setUntrackedUnproductive(bool value) async { final prefs = await SharedPreferences.getInstance(); prefs.setBool(untracked_unprod_key, value); } static Future setAutoLog(bool value) async { final prefs = await SharedPreferences.getInstance(); prefs.setBool(auto_log_key, value); } } final settings = Settings();