-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsimulator.ts
74 lines (53 loc) · 2.33 KB
/
simulator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { CalenderHelper } from './utils/calender_helper';
import { DateHelper } from './utils/date_helper';
import { ProgressBarHelper } from './utils/progress_bar_helper';
import { TweetHelper } from './utils/tweet_helper';
import { Calendar } from './types/calendar';
import { DateTime } from 'luxon';
import { SetupHelper } from './utils/setup_helper';
export class Simulator {
calender: Calendar;
constructor(calender: Calendar) {
this.calender = calender;
}
/**
* It loops through all days in the semester and generates a tweet for each day
*/
public async startSimulation(): Promise<void> {
try {
await SetupHelper.setupAll();
const defaultCalendarHelper = new CalenderHelper(this.calender);
const firstDay = defaultCalendarHelper.firstDayDateInCalender;
const totalDays = defaultCalendarHelper.totalDaysInSemester;
console.log('Start simulating 💡');
// Loop through all days in the semester
for (let dayIndex = 0; dayIndex <= totalDays; dayIndex++) {
let dateNow = DateTime.now();
const currentDayOffset = DateHelper.differenceBetweenDates(dateNow, firstDay) + dayIndex;
dateNow = dateNow.plus({ days: currentDayOffset });
console.log(`Current Day Offset: ${currentDayOffset}`);
console.log(`Current Date: ${dateNow}`);
const simulatedCalenderHelper = new CalenderHelper(this.calender, currentDayOffset);
const progressBar = await ProgressBarHelper.createSemesterProgressBar(simulatedCalenderHelper);
const tweet = TweetHelper.generateTweet(
progressBar.get(),
simulatedCalenderHelper.currentDayInSemester,
simulatedCalenderHelper.totalDaysInSemester,
simulatedCalenderHelper.nearestEvent,
);
console.log(`Current Day in the semester: ${simulatedCalenderHelper.currentDayInSemester}`);
console.log(`Tweet:\n\n ${tweet}`);
console.log(`\n=============================\n\n`);
}
console.log('Finish simulating ✅');
} catch (error) {
throw new Error(`Simulation failed due to: \n${error}`);
}
}
public static async start(): Promise<void> {
const calender = await CalenderHelper.getCurrentSemesterCalender();
const simulator = new Simulator(calender!);
await simulator.startSimulation();
}
}
Simulator.start();