package it.unisa.aDoctor.parser;

import it.unisa.aDoctor.beans.PackageBean;
import it.unisa.aDoctor.beans.ClassBean;
import java.util.ArrayList;


import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.TypeDeclaration;

public class PackageParser {

    public static PackageBean parse(IPackageFragment pPackage) throws JavaModelException {
        PackageBean packageBean = new PackageBean();
        CodeParser codeParser = new CodeParser();
        String textualContent = "";

        ArrayList<ClassBean> classes = new ArrayList<>();

        packageBean.setName(pPackage.getElementName());

        for (ICompilationUnit cu : pPackage.getCompilationUnits()) {

            textualContent += cu.getSource();

            CompilationUnit parsed = codeParser.createParser(cu.getSource());
            TypeDeclaration typeDeclaration = (TypeDeclaration) parsed.types().get(0);

            ArrayList<String> imported = new ArrayList<>();

            for (IImportDeclaration importedResource : cu.getImports()) {
                imported.add(importedResource.getElementName());
            }

            classes.add(ClassParser.parse(typeDeclaration, packageBean.getName(), imported));
        }

        packageBean.setTextContent(textualContent);

        return packageBean;
    }
}