import { Request, Response } from 'express'
import * as Papa from 'papaparse'
import * as fs from 'fs'
import { Carrito } from '@src/entity/Carrito'
import { getRepository } from 'typeorm'
import { Tipo } from '@src/entity/Tipo'
import { Equipo } from '@src/entity/Equipo'
export class CarritoController {
  public async carga (req: Request, res: Response) {
    const cargaFile = req.file
    if (!cargaFile) {
      res.status(400).send({
        status: false,
        data: 'No file is selected.'
      })
      return false
    }
    const fileReadResult = fs.readFileSync(cargaFile.path, 'utf-8')
    const parseResult = await Papa.parse(fileReadResult, {
      header: true
    })
    console.log(parseResult)
    let data: any = {}
    try {
      for (const i in parseResult.data) {
        data = parseResult.data[i]
        if (
          !data.kiosko ||
          !data.alias_carrito ||
          !data.no_serie ||
          !data.no_inventario
        ) {
          continue
        }
        console.log(data)
        await this.saveCarrito(data)
      }
    } catch (err) {
      res.status(400).send(err.message)
      return
    }
    res.status(200).send('okay')
  }

  private async saveCarrito (data: any) {
    // console.log(data)
    const carritoRepository = getRepository(Carrito)
    const tipoRepository = getRepository(Tipo)
    const equipoRepository = getRepository(Equipo)

    const tipo = new Tipo()
    const carrito = new Carrito()
    const equipo = new Equipo()

    const tipoFind = await tipoRepository.findOne({
      where: {
        nombre: data.tipo
      }
    })
    if (!tipoFind) {
      tipo.nombre = data.tipo
    }
    const carritoFind = await carritoRepository.findOne({
      where: {
        kiosko: data.kiosko,
        alias: data.alias_carrito,
        tipo: tipoFind
      }
    })

    if (!carritoFind) {
      carrito.kiosko = data.kiosko
      carrito.alias = data.alias_carrito
      carrito.tipo = !tipoFind ? tipo : tipoFind
    }

    equipo.alias = data.equipo_carrito
    equipo.noSerie = data.no_serie
    equipo.noInventario = data.no_inventario
    equipo.carrito = !carritoFind ? carrito : carritoFind
    if (!tipoFind) await tipoRepository.save(tipo)
    if (!carritoFind) await carritoRepository.save(carrito)
    await equipoRepository.save(equipo)
  }
}
