import { ipcMain, BrowserWindow } from 'electron';
import { BaseApiService } from '@sinotron/core';
import { TodoApiMeta } from './todo-api.meta.ts';
import { TodoItem } from './todo-api.interface';

export class TodoApiService extends BaseApiService {
  impl(win: BrowserWindow) {
    console.log('Implementing TodoApi');

    ipcMain.handle(TodoApiMeta.channels.getTodos, (event, args: any[]) => {
      console.log(`-> handling ${TodoApiMeta.channels.getTodos}`);

      return new Promise((resolve, reject) => {
        fetch('https://jsonplaceholder.typicode.com/todos')
          .then(response => response.json())
          .then((json: TodoItem[]) => {
            console.log(json);
            resolve(json);
          }).catch((err) => {
          console.error(err);
          reject(err);
        });
      });
    });

    ipcMain.handle(TodoApiMeta.channels.getTodo, (event, id: number) => {
      return new Promise((resolve, reject) => {
        fetch(`https://jsonplaceholder.typicode.com/todos/${id}`)
          .then(response => response.json())
          .then((json: TodoItem) => {
            console.log(json);
            resolve(json);
          })
          .catch((err) => {
            console.error(err);
            reject(err);
          });
      });
    });
  }
}

// Instance.get(TodoApiService)
export const todoApiService = new TodoApiService();