package es.tatvil.taiageweb.empleo;

import org.springframework.stereotype.Repository;
import java.sql.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Repository
public class HistoricoSQLiteRepository implements HistoricoRepository {
    private static final String DB_URL = "jdbc:sqlite:empleo_historico.db";

    public HistoricoSQLiteRepository() {
        try (Connection conn = DriverManager.getConnection(DB_URL)) {
            String sql = "CREATE TABLE IF NOT EXISTS publicaciones (organismo TEXT, fecha TEXT, titulo TEXT, enlace TEXT, PRIMARY KEY (organismo, fecha, titulo, enlace))";
            conn.createStatement().execute(sql);
        } catch (SQLException e) {
            // Manejar error
        }
    }

    @Override
    public boolean existe(PublicacionEmpleo publicacion) {
        String sql = "SELECT 1 FROM publicaciones WHERE organismo=? AND fecha=? AND titulo=? AND enlace=?";
        try (Connection conn = DriverManager.getConnection(DB_URL);
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, publicacion.getOrganismo());
            ps.setString(2, publicacion.getFecha().toString());
            ps.setString(3, publicacion.getTitulo());
            ps.setString(4, publicacion.getEnlace());
            ResultSet rs = ps.executeQuery();
            return rs.next();
        } catch (SQLException e) {
            return false;
        }
    }

    @Override
    public void guardar(PublicacionEmpleo publicacion) {
        String sql = "INSERT OR IGNORE INTO publicaciones (organismo, fecha, titulo, enlace) VALUES (?, ?, ?, ?)";
        try (Connection conn = DriverManager.getConnection(DB_URL);
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, publicacion.getOrganismo());
            ps.setString(2, publicacion.getFecha().toString());
            ps.setString(3, publicacion.getTitulo());
            ps.setString(4, publicacion.getEnlace());
            ps.executeUpdate();
        } catch (SQLException e) {
            // Manejar error
        }
    }

    @Override
    public List<PublicacionEmpleo> obtenerTodas() {
        List<PublicacionEmpleo> lista = new ArrayList<>();
        String sql = "SELECT organismo, fecha, titulo, enlace FROM publicaciones";
        try (Connection conn = DriverManager.getConnection(DB_URL);
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery(sql)) {
            while (rs.next()) {
                PublicacionEmpleo pub = new PublicacionEmpleo();
                pub.setOrganismo(rs.getString("organismo"));
                pub.setFecha(LocalDate.parse(rs.getString("fecha")));
                pub.setTitulo(rs.getString("titulo"));
                pub.setEnlace(rs.getString("enlace"));
                lista.add(pub);
            }
        } catch (SQLException e) {
            // Manejar error
        }
        return lista;
    }
}
