package com.aluracursos.screenmatch.principal;
import com.aluracursos.screenmatch.model.DatosEpisodio;
import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporada;
import com.aluracursos.screenmatch.model.Episodio;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
public class Principal {
private Scanner teclado = new Scanner(System.in);
private ConsumoAPI consumoAPI = new ConsumoAPI();
private final String URL_BASE = "https://www.omdbapi.com/?t=";
private final String API_KEY = "&apikey=4fc7c187";
private ConvierteDatos conversor = new ConvierteDatos();
public void mostrarMenu(){
System.out.println("Por favor escribe el nombre de la serie que deseas buscar");
var nombreSerie = teclado.nextLine();
var json = consumoAPI.obtenerDatos(URL_BASE + nombreSerie.replace(" ","+") + API_KEY);
var datos = conversor.obtenerDatos(json, DatosSerie.class);
System.out.println(datos);
//Busca los datos de todas las temporadas
List<DatosTemporada> temporadas = new ArrayList<>();
for (int i = 1; i <= datos.totalDeTemporadas(); i++) {
json = consumoAPI.obtenerDatos(URL_BASE + nombreSerie.replace(" ","+") + "&Season=" + i + API_KEY);
var datosTemporadas = conversor.obtenerDatos(json,DatosTemporada.class);
temporadas.add(datosTemporadas);
}
List<DatosEpisodio> datosEpisodios = temporadas.stream()
.flatMap(t -> t.episodios().stream())
.collect(Collectors.toList());
List<Episodio> episodios = temporadas.stream()
.flatMap(t -> t.episodios().stream()
.map(d -> new Episodio(t.numero(),d)))
.collect(Collectors.toList());
episodios.forEach(System.out::println);
Map<Integer, Double> evaluacionesPorTemporada = episodios.stream()
.filter(e -> e.getEvaluacion()>0.0)
.collect(Collectors.groupingBy(Episodio::getTemporada,
Collectors.averagingDouble(Episodio::getEvaluacion)));
System.out.println(evaluacionesPorTemporada);
DoubleSummaryStatistics est = episodios.stream()
.filter(e -> e.getEvaluacion()>0.0)
.collect(Collectors.summarizingDouble(Episodio::getEvaluacion);
System.out.println("Media de las evaluaciones " + est.getAverage());
System.out.println("Episodio mejor evaludado " + est.getMax());
System.out.println("Episodio peor evaluado" + est.getMin());