import mongoose from 'mongoose';
import { Project, Unit } from '@/modules/project';
import { calcChange } from '@/shared/utils/arithmeticOp';

export const calculateBudgetFromProjectAndUnit = async (
  projectId: mongoose.Types.ObjectId,
  unitId?: mongoose.Types.ObjectId,
): Promise<Number> => {
  const project = await Project.findById(projectId).select('pricePerSqYard');
  if (!project) throw new Error(`Project not found for ID: ${projectId}`);

  const pricePerSqFt = Number(project.pricePerSqYard) / 9;
  let size = 0;

  if (unitId) {
    const unit = await Unit.findById(unitId).select('size');
    if (unit?.size) size = Number(unit.size);
  } else {
    const units = await Unit.find({ project: projectId }).select('size');
    const sizes = units
      .map((u) => Number(u.size))
      .filter((s) => !isNaN(s) && s > 0);
    size = Math.max(...sizes, 0);
  }

  if (size === 0) return Number(pricePerSqFt.toFixed(2));

  const budget = pricePerSqFt * size;
  return Number(budget.toFixed(2));
};

export const computeLeadTrendsWithChange = (
  data: {
    year: number;
    month: string;
    monthNum: number;
    leads: number;
  }[],
) =>
  data.map((item, idx) => {
    const prev = data[idx - 1];
    const changeData = prev
      ? calcChange(item.leads, prev.leads)
      : { change: 0, direction: 'neutral' };

    return {
      ...item,
      change: changeData.change,
      changeDirection: changeData.direction,
    };
  });
