import PartidosList from "../Partidos/Partidos";
import ProvinciasList from "../Provincias/Provincias";
import { TextObjectFilterResult } from "../TextObjectFilter.model";
import { LocalidadesAdapterMongoose } from "./Localidades.Adapter.Mongoose";
import {
    FindLocalidadesParams,
    ILocalidadesManager,
    PaginateFilterBlockParams,
} from "./Localidades.interface";

class LocalidadesManager implements ILocalidadesManager {
    localidades: LocalidadesAdapterMongoose;

    constructor() {
        this.localidades = new LocalidadesAdapterMongoose();
    }

    public async filterAll(data: FindLocalidadesParams): Promise<TextObjectFilterResult[]> {
        const localidades = await this.localidades.find(data);
        const returnData: TextObjectFilterResult[] = [];

        for (const localidad of localidades) {
            returnData.push({
                id: localidad.name,
                name: localidad.name.toLowerCase(),
            });
        }
        return returnData;
    }

    public async paginate(data: PaginateFilterBlockParams): Promise<TextObjectFilterResult[]> {
        const localidades = await this.localidades.paginate(data);
        const resultados: TextObjectFilterResult[] = [];

        for (const localidad of localidades.data) {
            const provincia = await ProvinciasList.provincias.provinciaList.findOne({
                name: localidad.provincia,
            });
            const partido = await PartidosList.partidos.partidoList.findOne({
                name: localidad.partido,
            });

            let partidoName = "";
            let provinciaName = "";

            if (partido) {
                partidoName = partido.name;
            }

            if (provincia) {
                provinciaName = provincia.name;
            }

            resultados.push({
                id: localidad.name,
                name: localidad.name.toLowerCase(),
                description: partidoName + " - " + provinciaName,
            });
        }

        return resultados;
    }
}

const LocalidadesList = new LocalidadesManager();

export default LocalidadesList;
