package es.tatvil.taiageweb.empleo.fuentes;

import es.tatvil.taiageweb.empleo.FuenteEmpleo;
import es.tatvil.taiageweb.empleo.PublicacionEmpleo;
import org.springframework.stereotype.Component;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.XmlReader;
import com.rometools.rome.feed.synd.SyndEntry;
import com.rometools.rome.feed.synd.SyndFeed;
import java.net.URL;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Component
public class FuenteBOERSS implements FuenteEmpleo {
    private static final String RSS_URL = "https://www.boe.es/rss/BOE-S-atom.xml";
    private static final String[] KEYWORDS = {
        "informática", "TIC", "técnico auxiliar informática", "técnico especialista", "sistemas", "desarrollo", "soporte", "microinformática", "administración electrónica", "programación", "DAM", "ASIR", "C1 informática", "bolsa", "interino"
    };

    @Override
    public List<PublicacionEmpleo> obtenerNuevasPublicaciones() {
        List<PublicacionEmpleo> resultados = new ArrayList<>();
        try {
            URL feedSource = new URL(RSS_URL);
            SyndFeedInput input = new SyndFeedInput();
            SyndFeed feed = input.build(new XmlReader(feedSource));
            for (SyndEntry entry : feed.getEntries()) {
                String titulo = entry.getTitle();
                String resumen = entry.getDescription() != null ? entry.getDescription().getValue() : "";
                if (contienePalabraClave(titulo) || contienePalabraClave(resumen)) {
                    PublicacionEmpleo pub = new PublicacionEmpleo();
                    pub.setOrganismo("BOE");
                    pub.setFecha(entry.getPublishedDate() != null ? entry.getPublishedDate().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate() : LocalDate.now());
                    pub.setTitulo(titulo);
                    pub.setEnlace(entry.getLink());
                    resultados.add(pub);
                }
            }
        } catch (Exception e) {
            // Manejar error de lectura del feed
        }
        return resultados;
    }

    private boolean contienePalabraClave(String texto) {
        if (texto == null) return false;
        String lower = texto.toLowerCase();
        for (String kw : KEYWORDS) {
            if (lower.contains(kw.toLowerCase())) return true;
        }
        return false;
    }

    @Override
    public String getNombre() {
        return "BOE RSS";
    }
}
