import { Injectable } from "@nestjs/common";
import { InsertOnlyRepository } from "../common/insert-only-repository";
import { TenantRepositoryAccessor } from "../tenancy/tenant-repository.accessor";
import { MaepluMirror } from "./entities/maeplu-mirror.entity";

export type ProductoParaEspejar = {
  plu: string;
  desclarga: string;
  precio: number;
  costo: number;
  iva: number;
  pagaiva: boolean;
  esServicio: boolean;
  usainventario: boolean;
};

@Injectable()
export class MaepluMirrorService {
  constructor(private readonly tenantAccessor: TenantRepositoryAccessor) {}

  private get repository(): InsertOnlyRepository<MaepluMirror> {
    return new InsertOnlyRepository(this.tenantAccessor.repositoryFor(MaepluMirror));
  }

  async insertIfMissing(
    producto: ProductoParaEspejar,
  ): Promise<{ inserted: boolean }> {
    const existing = await this.repository.findOne({
      where: { plu: producto.plu },
    });

    if (existing) {
      return { inserted: false };
    }

    // Evita el bloqueo de POSTouch "venta por debajo de costo" en productos
    // que no son servicio y no traen costo definido (Transaccion.php:1988).
    const costo =
      !producto.esServicio && producto.costo <= 0
        ? producto.precio
        : producto.costo;

    await this.repository.insert({
      plu: producto.plu,
      desclarga: producto.desclarga,
      precio: producto.precio,
      costo,
      iva: producto.iva,
      pagaiva: producto.pagaiva,
      es_servicio: producto.esServicio,
      usainventario: producto.usainventario,
      es_taller: true,
      es_producto: true,
    });

    return { inserted: true };
  }
}
