/**
 * 数据库服务 - 渲染进程
 * 使用ipcRenderer与主进程通信，处理数据库操作
 */

// 获取ipcRenderer
const getIpcRenderer = () => {
  // 使用preload.js暴露的window.electron对象
  if (window.electron && window.electron.ipcRenderer) {
    return window.electron.ipcRenderer;
  }
  
  // 降级到旧方法（仅用于向后兼容）
  if (window.require) {
    try {
      return window.require('electron').ipcRenderer;
    } catch (error) {
      console.error('无法通过require获取ipcRenderer:', error);
    }
  }
  
  console.error('无法获取ipcRenderer，electron API不可用');
  return null;
};

// 初始化数据库
const initDatabase = async (forceUpdate = false) => {
  console.log(`尝试初始化数据库，forceUpdate=${forceUpdate}`);
  const ipcRenderer = getIpcRenderer();
  if (!ipcRenderer) {
    console.error('ipcRenderer不可用，无法初始化数据库');
    return false;
  }

  try {
    console.log('调用ipcRenderer.invoke("db:init")...');
    const result = await ipcRenderer.invoke('db:init', forceUpdate);
    console.log('db:init返回结果:', result);
    // 确保返回布尔值，无论result的数据结构如何
    return result && result.success === true;
  } catch (error) {
    console.error('初始化数据库失败:', error);
    return false;
  }
};

// 获取数据库路径
const getDbPath = async () => {
  const ipcRenderer = getIpcRenderer();
  if (!ipcRenderer) {
    console.error('ipcRenderer不可用，无法获取数据库路径');
    return null;
  }

  try {
    return await ipcRenderer.invoke('db:getPath');
  } catch (error) {
    console.error('获取数据库路径失败:', error);
    return null;
  }
};

// Book服务
const bookService = {
  // 创建新项目
  async createBook(bookData) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法创建项目');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('book:create', bookData);
    if (!result.success) {
      throw new Error(result.error || '创建项目失败');
    }
    return result.id;
  },

  // 获取所有项目
  async getAllBooks() {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法获取项目列表');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('book:getAll');
    if (!result.success) {
      throw new Error(result.error || '获取项目列表失败');
    }
    return result.books;
  },

  // 根据ID获取项目
  async getBookById(id) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法获取项目');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('book:getById', id);
    if (!result.success) {
      throw new Error(result.error || `获取项目(ID: ${id})失败`);
    }
    return result.book;
  },

  // 更新项目信息
  async updateBook(id, bookData) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法更新项目');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('book:update', { id, bookData });
    if (!result.success) {
      throw new Error(result.error || `更新项目(ID: ${id})失败`);
    }
    return true;
  },

  // 删除项目
  async deleteBook(id) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法删除项目');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('book:delete', id);
    if (!result.success) {
      throw new Error(result.error || `删除项目(ID: ${id})失败`);
    }
    return true;
  }
};

// BookInfo服务
const bookInfoService = {
  // 创建项目详细信息
  async createBookInfo(bookInfoData) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法创建项目详细信息');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('bookInfo:create', bookInfoData);
    if (!result.success) {
      throw new Error(result.error || '创建项目详细信息失败');
    }
    return result.id;
  },

  // 根据项目ID获取详细信息
  async getBookInfoByBookId(bookId) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法获取项目详细信息');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('bookInfo:getByBookId', bookId);
    if (!result.success) {
      throw new Error(result.error || `获取项目详细信息(BookID: ${bookId})失败`);
    }
    return result.bookInfo || []; // 返回字幕段落数组，如果为空则返回空数组
  },

  // 更新项目详细信息
  async updateBookInfo(segmentId, bookInfoData) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法更新项目详细信息');
      throw new Error('ipcRenderer不可用');
    }

    // 添加ID到bookInfoData对象
    const dataWithId = { 
      ...bookInfoData,
      id: segmentId 
    };

    const result = await ipcRenderer.invoke('bookInfo:update', { 
      bookId: segmentId, // 保持向后兼容
      bookInfoData: dataWithId 
    });
    
    if (!result.success) {
      throw new Error(result.error || `更新项目详细信息(segmentId: ${segmentId})失败`);
    }
    return true;
  },

  // 删除项目详细信息
  async deleteBookInfo(bookId) {
    const ipcRenderer = getIpcRenderer();
    if (!ipcRenderer) {
      console.error('ipcRenderer不可用，无法删除项目详细信息');
      throw new Error('ipcRenderer不可用');
    }

    const result = await ipcRenderer.invoke('bookInfo:delete', bookId);
    if (!result.success) {
      throw new Error(result.error || `删除项目详细信息(BookID: ${bookId})失败`);
    }
    return true;
  }
};

module.exports = {
  initDb: initDatabase,
  getDbPath,
  bookService,
  bookInfoService
}; 