"""
 * Copyright 2020, Departamento de sistemas y Computación,
 * Universidad de Los Andes
 *
 *
 * Desarrolado para el curso ISIS1225 - Estructuras de Datos y Algoritmos
 *
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along withthis program.  If not, see <http://www.gnu.org/licenses/>.
 """

import config as cf
import model
import DISClib.DataStructures.arraylist as array
import DISClib.Algorithms.Sorting.mergesort as mergesort
import DISClib.DataStructures.arraylistiterator as AIT
import copy
from DISClib.ADT import orderedmap as omp
from DISClib.ADT import map as mp

def cargaDeDatos(archivo_artistas,archivo_artworks):
    MapaArtistas, llavesArtistas, MapaArtworks, llavesArtworks, dicIDs, dicNacionalidad = model.cargaDeDatos(archivo_artistas,archivo_artworks)
    return MapaArtistas, llavesArtistas, MapaArtworks, llavesArtworks, dicIDs, dicNacionalidad

def Req1(mapaArtistas, llavesArtistas, a1, a2):
    mapaArtistas2 = copy.deepcopy(mapaArtistas)
    llavesArtistas2 = copy.deepcopy(llavesArtistas)
    primeros3, n_artistas = model.artistasMinsMaxs(mapaArtistas['ArtistasPorNacimiento'], llavesArtistas['ArtistasPorNacimiento'],a1,a2,model.porNúmero)
    ultimos3, n_artistas = model.artistasMinsMaxs(mapaArtistas2['ArtistasPorNacimiento'], llavesArtistas2['ArtistasPorNacimiento'],a2,a1,model.porNúmeroInv)
    return n_artistas, primeros3, ultimos3

def Req2(mapaArtworks,llavesArtworks,f1,f2,dicIDs):
    mapaArtworks2 = copy.deepcopy(mapaArtworks)
    llavesArtworks2 = copy.deepcopy(llavesArtworks)
    primeros3, n_artworks, total_obras = model.artworksMinsMaxs(mapaArtworks['ObrasPorAdquisión'], llavesArtworks['ObrasPorAdquisión'],f1,f2,model.porFecha,dicIDs)
    ultimos3, n_artworks, total_obras = model.artworksMinsMaxs(mapaArtworks2['ObrasPorAdquisión'], llavesArtworks2['ObrasPorAdquisión'],f2,f1,model.porFechaInv,dicIDs)
    return n_artworks, total_obras, primeros3, ultimos3

def Req3(mapaArtworks,llavesArtworks,artista):
    total_obras, total_tecnicas, tecnica_maxima, obras_medio = model.obrasArtista(mapaArtworks['ObrasPorArtista'], llavesArtworks['ObrasPorArtista'],artista)
    return total_obras, total_tecnicas, tecnica_maxima, obras_medio

def Req4(mapaArtworks,llavesArtworks,dicIDs):
    top10, obrasN1 = model.obrasNacionalidad(mapaArtworks['ObrasPorNacionalidad'],llavesArtworks['ObrasPorNacionalidad'],dicIDs)
    return top10, obrasN1