import java.io.*;
import java.util.*;

public class Conv {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("Uso: java Conv <archivo_entrada>.ASC <archivo_salida>");
            System.out.println("Genera dos archivos de salida: archivo_salida.aristas y archivo_salida.caras");
            return;
        }

        String inputFile = args[0];
        String outputFile = args[1]+".aristas";
        String outputFile2 = args[1]+".caras";

        List<String> vertices = new ArrayList<>();
        List<String> caras = new ArrayList<>();
        List<String> aristas = new ArrayList<>();

        try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {
            String line;
            while ((line = reader.readLine()) != null) {
                line = line.trim();
                if (line.startsWith("Vertex")) {
                    String[] parts = line.split(": ", 2);
                    if (parts.length > 1) {
                        vertices.add(parts[1].replace("X:","").replace("Y:","").replace("Z:",""));
                    }
                } else if (line.startsWith("Face")) {
                    String[] parts = line.split(" ");
                    System.out.println(line+" "+parts[1]);
                    if (parts.length >= 5) {    // Face 0:	A:0 B:4 C:5 AB:1 BC:1 CA:1
                        try {
                            String v1 = parts[1].split(":")[2];
                            String v2 = parts[2].split(":")[1];
                            String v3 = parts[3].split(":")[1];
                            caras.add(v1+" "+v2+" "+v3);
                            aristas.add(v1+" "+v2);
                            aristas.add(v2+" "+v3);
                            aristas.add(v1+" "+v3);
                        } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
                            System.err.println("Error procesando línea: " + line);
                        }
                    }
                }
            }
        } catch (IOException e) {
            System.err.println("Error al leer el archivo: " + e.getMessage());
            return;
        }

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
            writer.write(vertices.size() + "\n");
            writer.write(aristas.size() + "\n");
            for (String vertex : vertices) {
                writer.write(vertex + "\n");
            }
            for (String arista : aristas) {
                writer.write(arista + "\n");
            }
        } catch (IOException e) {
            System.err.println("Error al escribir el archivo: " + e.getMessage());
        }

        try (BufferedWriter writer2 = new BufferedWriter(new FileWriter(outputFile2))) {
            writer2.write(vertices.size() + "\n");
            writer2.write(caras.size() + "\n");
            for (String vertex : vertices) {
                writer2.write(vertex + "\n");
            }
            for (String cara : caras) {
                writer2.write(cara + "\n");
            }
        } catch (IOException e) {
            System.err.println("Error al escribir el archivo: " + e.getMessage());
        }

    }

    private static String formatEdge(int v1, int v2) {
        return Math.min(v1, v2) + " " + Math.max(v1, v2);
    }
}
