import { ResultSetHeader, RowDataPacket } from "mysql2";
import DB from "../config/database/db";
import assetMaintenanceTypes from "../schemas/assetMaintenance.schema";

const assetMaintenanceDB: any = {};

assetMaintenanceDB.getById = async ({ id }: assetMaintenanceTypes) => {
  const query = "Select * from AssetMaintenance where id = ?";
  const data = [id];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows.length > 0) return rows[0];
  else return false;
};

assetMaintenanceDB.add = async ({
  clientId,
  propId,
  assetId,
  description,
  cost,
  assignedToType,
  assignedToId,
  lastMaintenance,
  nextMaintenance,
  expenseId=null,
}: assetMaintenanceTypes) => {
  const query =
    "Insert into AssetMaintenance (clientId, propId, assetId, description, cost, assignedToType, assignedToId, lastMaintenance, nextMaintenance, expenseId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  const data = [
    clientId,
    propId,
    assetId,
    description,
    cost,
    assignedToType,
    assignedToId,
    lastMaintenance,
    nextMaintenance,
    expenseId,
  ];
  const [row] = await DB.execute<ResultSetHeader>(query, data);
  return row.insertId;
};

assetMaintenanceDB.getByAssetId = async ({ assetId }: assetMaintenanceTypes) => {
  const query = "Select * from AssetMaintenance where assetId = ? order by id desc";
  const data = [assetId];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows.length > 0) return rows;
  else return [];
};

assetMaintenanceDB.getByPropIdAndAssetId = async ({
  propId,
  assetId,
}: assetMaintenanceTypes) => {
  const query =
    "Select * from AssetMaintenance where propId = ? and assetId = ? order by id desc";
  const data = [propId, assetId];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows.length > 0) return rows;
  else return false;
};

assetMaintenanceDB.edit = async ({
  id,
  description,
  cost,
  assignedToType,
  assignedToId,
  lastMaintenance,
  nextMaintenance,
}: assetMaintenanceTypes) => {
  const query =
    "Update AssetMaintenance set description = ?, cost = ?, assignedToType = ?, assignedToId = ?, lastMaintenance = ?, nextMaintenance = ? where id = ?";
  const data = [
    description,
    cost,
    assignedToType,
    assignedToId,
    lastMaintenance,
    nextMaintenance,
    id,
  ];
  await DB.execute<ResultSetHeader>(query, data);
  return true;
};



export default assetMaintenanceDB;