package com.optage.parser;

import com.optage.model.ChangeMarker;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternAExtractor {
    // Pattern: // v72.00.00 ANK-4494-00-00 ADD START
    private static final Pattern MARKER_PATTERN = Pattern.compile(
        "//\\s*(?:v[\\d.]+)?\\s*([A-Z]+[-\\d]+)\\s+(ADD|MOD|DEL)\\s+(START|END)"
    );

    // Ticket patterns: ANK-, OM-, IT1-, IT2-, ST-, KAD-, #nnnnn
    private static final Pattern TICKET_PATTERN = Pattern.compile(
        "(ANK|OM|IT1|IT2|ST|KAD|#)[-\\d]+"
    );

    public List<ChangeMarker> extract(String code) {
        List<ChangeMarker> markers = new ArrayList<>();
        String[] lines = code.split("\n");
        Map<String, Integer> startMarkers = new HashMap<>();

        for (int i = 0; i < lines.length; i++) {
            String line = lines[i];
            Matcher matcher = MARKER_PATTERN.matcher(line);

            if (matcher.find()) {
                String ticketId = matcher.group(1);
                String opType = matcher.group(2);
                String marker = matcher.group(3);

                if ("START".equals(marker)) {
                    startMarkers.put(ticketId + "_" + opType, i);
                } else if ("END".equals(marker)) {
                    String key = ticketId + "_" + opType;
                    if (startMarkers.containsKey(key)) {
                        int startLine = startMarkers.remove(key);
                        String version = extractVersion(line);
                        String author = extractAuthor(line);
                        String date = extractDate(line);

                        ChangeMarker cm = new ChangeMarker(
                            ticketId, version, opType, author, date, startLine, i
                        );
                        markers.add(cm);
                    }
                }
            }
        }

        return markers;
    }

    private String extractVersion(String line) {
        Pattern versionPattern = Pattern.compile("v[\\d.]+");
        Matcher matcher = versionPattern.matcher(line);
        return matcher.find() ? matcher.group() : "";
    }

    private String extractAuthor(String line) {
        // Simplified: extract author from comment if available
        return "";
    }

    private String extractDate(String line) {
        // Simplified: extract date from comment if available
        return "";
    }
}