import { grpcClientCall } from '../../utilities/grpcHelper';
import { EVENT_NAMES } from '../../constants/define';
import * as electronStore from "../../utilities/electronStore";
const grpc = require('@grpc/grpc-js');
const { ipcMain } = require('electron');

const { LOGIN, INITIATE_RESET_PASSWORD, REGISTER, CHANGE_PASSWORD , LOGOUT} = EVENT_NAMES.AUTHENTICATION;

export default function authController(mainProto, SERVER_URL, options) {
  const client = new mainProto.AuthController(SERVER_URL, grpc.credentials.createInsecure(), options);

  ipcMain.handle(LOGIN, async (event, email, password) => {
    
    const response = await grpcClientCall(client, 'Login', { email, password }, event, false);

    const user = {
      userId: response.userId,
      email: response.email,
      token: response.token,
      permission : response.permission,
      // Thêm các thông tin khác của người dùng nếu cần
    };
  
    // Lưu đối tượng người dùng vào Electron Store
    electronStore.set('user', user);
    if ( electronStore.get('user')) {
      // Gửi dữ liệu người dùng mới đi renderer process khi có sự thay đổi
      event.sender.send('user-data',  electronStore.get('user'));
    }
    return response;
  
  });
  ipcMain.handle(LOGOUT, async (event) => {
    try {
      // Thực hiện các bước logout cần thiết
      console.log("check9========================================da xoa user============", electronStore.get("user"));

      electronStore.set("user", null);
      console.log("check9========================================da xoa user============", electronStore.get("user"));

      // Gửi thông báo thành công về renderer process
      event.sender.send(EVENT_NAMES.AUTHENTICATION.LOGOUT_SUCCESS, 'Logout successful');
    } catch (error) {
      // Nếu có lỗi, gửi thông báo lỗi về renderer process
      event.sender.send(EVENT_NAMES.AUTHENTICATION.LOGOUT_ERROR, 'Logout failed');
    }
  });
  ipcMain.handle(REGISTER, async (event, email, password) => {
    return await grpcClientCall(client, 'Register', { email, password }, event, false);
  });

  ipcMain.handle(CHANGE_PASSWORD, async (event, attributes) => {
    return await grpcClientCall(client, 'ChangePassword', attributes, event, false);
  });

  ipcMain.handle(INITIATE_RESET_PASSWORD, async (event, attributes) => {
    console.log({ attributes });
    return await grpcClientCall(client, 'InitiatePasswordReset', attributes, event, false);
  });
}
