package com.optage.parser;

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

public class PatternCExtractor {
    private static final Pattern SYSTEM_NAME_PATTERN = Pattern.compile(
        "システム名\\s*:\\s*([^\\n]+)"
    );
    private static final Pattern MODULE_NAME_PATTERN = Pattern.compile(
        "モジュール名\\s*:\\s*([^\\n]+)"
    );
    private static final Pattern PURPOSE_PATTERN = Pattern.compile(
        "<機能概要>\\s*([^<]+)"
    );
    private static final Pattern REVISION_PATTERN = Pattern.compile(
        "v[\\d.]+\\s+\\d{4}/\\d{2}/\\d{2}\\s+([^\\s]+)\\s+(.+)"
    );

    public FileHeader extract(String code) {
        String systemName = extractField(code, SYSTEM_NAME_PATTERN);
        String moduleName = extractField(code, MODULE_NAME_PATTERN);
        String purposeJa = extractField(code, PURPOSE_PATTERN);
        List<FileHeader.RevisionEntry> revisions = extractRevisions(code);

        return new FileHeader(
            systemName, moduleName, "", "", purposeJa,
            revisions.size(), revisions
        );
    }

    private String extractField(String code, Pattern pattern) {
        Matcher matcher = pattern.matcher(code);
        return matcher.find() ? matcher.group(1).trim() : null;
    }

    private List<FileHeader.RevisionEntry> extractRevisions(String code) {
        List<FileHeader.RevisionEntry> revisions = new ArrayList<>();
        Matcher matcher = REVISION_PATTERN.matcher(code);

        while (matcher.find()) {
            String author = matcher.group(1);
            String description = matcher.group(2);
            revisions.add(new FileHeader.RevisionEntry(
                "", "", author, null, description
            ));
        }

        return revisions;
    }
}