type Statistics = { cpuUsage: number; ramUsage: number; storageUsage: number; }; type StaticData = { totalStorage: number; cpuModel: string; totalMemoryGB: number; }; type View = 'CPU' | 'RAM' | 'STORAGE'; type FrameWindowAction = 'CLOSE' | 'MAXIMIZE' | 'MINIMIZE'; type EventPayloadMapping = { statistics: Statistics; getStaticData: StaticData; changeView: View; sendFrameAction: FrameWindowAction; }; type UnsubscribeFunction = () => void; interface ProjectListResponse { success: boolean; vaId?: string; vaName?: string; totalProjects?: number; activeProjects?: number; awayProjects?: number; totalWorkTime?: string; totalWorkMs?: number; data?: any[]; // you can replace `any[]` with a typed array later } interface TabActivity { title: string; appName: string; from: string; to: string; durationMs: number; durationFormatted: string; } // Each session includes tabs and time span interface ProjectSession { from: string; to: string; totalSessionTime: string; tabs: TabActivity[]; } // Complete response for project logs interface ProjectLogResponse { vaId: string; vaName: string; vaEmail: string; totalWorkTime: string; totalWorkMs: number; sessions: ProjectSession[]; } interface Window { electron: { login: (credentials: { email: string; password: string }) => Promise; logout: () => Promise; getToken: (tokenKey: "ACCESS_TOKEN" | "REFRESH_TOKEN") => Promise; uploadScreenshot: () => {}; getActiveAppDetails: () => {}; toggleCloseBtn: (shouldEnable: boolean) => {}, resizeWindow: (width: number, height: number) => {}, onWindowUpdate: (callback: (data: any) => void) => void; getProjectList: () => Promise; startProjectTracking: (data: { vaId: string; projectId: string; type: string; }) => Promise; stopProjectTracking: (data: { vaId: string; projectId: string; type: string; }) => Promise; trackingTabsOpeningClosing: (data: { id?: string; // optional, only present if updating logId: string; projectId: string; title: string; appName: string; }) => Promise; // getProjectLogs: (projectId: string) => Promise<{ success: boolean; logs: ProjectLogResponse[] }>; getProjectLogs: ( projectID: string, fromDate?: string, toDate?: string ) => Promise<{ success: boolean; logs: ProjectLogResponse[] }>; }; }