// Path: src/main/java/ru/adelf/idea/dotenv/api/EnvironmentVariablesProvider.java
// public interface EnvironmentVariablesProvider {
//     @NotNull
//     FileAcceptResult acceptFile(VirtualFile file);
// 
//     @NotNull
//     Collection<KeyValuePsiElement> getElements(PsiFile psiFile);
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/api/FileAcceptResult.java
// public class FileAcceptResult {
//     public final static FileAcceptResult ACCEPTED = new FileAcceptResult(true, true);
//     public final static FileAcceptResult NOT_ACCEPTED = new FileAcceptResult(false, true);
//     public final static FileAcceptResult ACCEPTED_SECONDARY = new FileAcceptResult(true, false);
// 
//     private final boolean accepted;
//     private final boolean primary;
// 
//     private FileAcceptResult(boolean accepted, boolean primary) {
//         this.accepted = accepted;
//         this.primary = primary;
//     }
// 
//     public boolean isAccepted() {
//         return accepted;
//     }
// 
//     public boolean isPrimary() {
//         return primary;
//     }
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/models/KeyValuePsiElement.java
// public class KeyValuePsiElement {
// 
//     private final String key;
//     private final String value;
//     private final PsiElement element;
// 
//     public KeyValuePsiElement(String key, String value, PsiElement element) {
//         this.key = key;
//         this.value = value;
//         this.element = element;
//     }
// 
//     public String getKey() {
//         return key.trim();
//     }
// 
//     public String getShortValue() {
//         if (value.indexOf('\n') != -1) {
//             return clearString(value.substring(0, value.indexOf('\n'))) + "...";
//         }
// 
//         return value.trim();
//     }
// 
//     private String clearString(String s) {
//         return StringUtil.trim(s.trim(), ch -> ch != '\\').trim();
//     }
// 
//     public PsiElement getElement() {
//         return element;
//     }
// }


import com.intellij.docker.dockerFile.DockerFileType;
import com.intellij.docker.dockerFile.DockerPsiFile;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import ru.adelf.idea.dotenv.api.EnvironmentVariablesProvider;
import ru.adelf.idea.dotenv.api.FileAcceptResult;
import ru.adelf.idea.dotenv.models.KeyValuePsiElement;
import java.util.Collection;
import java.util.Collections;
package ru.adelf.idea.dotenv.docker;



public class DockerfileVariablesProvider implements EnvironmentVariablesProvider {
    @NotNull
    @Override
    public FileAcceptResult acceptFile(VirtualFile file) {
        return file.getFileType().equals(DockerFileType.DOCKER_FILE_TYPE) ? FileAcceptResult.ACCEPTED : FileAcceptResult.NOT_ACCEPTED;
    }

    @NotNull
    @Override
    public Collection<KeyValuePsiElement> getElements(PsiFile psiFile) {
        if(psiFile instanceof DockerPsiFile) {
            DockerfilePsiElementsVisitor visitor = new DockerfilePsiElementsVisitor();
            psiFile.acceptChildren(visitor);

            return visitor.getCollectedItems();
        }

// Path: src/main/java/ru/adelf/idea/dotenv/api/EnvironmentVariablesProvider.java
// public interface EnvironmentVariablesProvider {
//     @NotNull
//     FileAcceptResult acceptFile(VirtualFile file);
// 
//     @NotNull
//     Collection<KeyValuePsiElement> getElements(PsiFile psiFile);
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/api/FileAcceptResult.java
// public class FileAcceptResult {
//     public final static FileAcceptResult ACCEPTED = new FileAcceptResult(true, true);
//     public final static FileAcceptResult NOT_ACCEPTED = new FileAcceptResult(false, true);
//     public final static FileAcceptResult ACCEPTED_SECONDARY = new FileAcceptResult(true, false);
// 
//     private final boolean accepted;
//     private final boolean primary;
// 
//     private FileAcceptResult(boolean accepted, boolean primary) {
//         this.accepted = accepted;
//         this.primary = primary;
//     }
// 
//     public boolean isAccepted() {
//         return accepted;
//     }
// 
//     public boolean isPrimary() {
//         return primary;
//     }
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/models/KeyValuePsiElement.java
// public class KeyValuePsiElement {
// 
//     private final String key;
//     private final String value;
//     private final PsiElement element;
// 
//     public KeyValuePsiElement(String key, String value, PsiElement element) {
//         this.key = key;
//         this.value = value;
//         this.element = element;
//     }
// 
//     public String getKey() {
//         return key.trim();
//     }
// 
//     public String getShortValue() {
//         if (value.indexOf('\n') != -1) {
//             return clearString(value.substring(0, value.indexOf('\n'))) + "...";
//         }
// 
//         return value.trim();
//     }
// 
//     private String clearString(String s) {
//         return StringUtil.trim(s.trim(), ch -> ch != '\\').trim();
//     }
// 
//     public PsiElement getElement() {
//         return element;
//     }
// }


// Path: src/main/java/ru/adelf/idea/dotenv/docker/DockerfileVariablesProvider.java
import com.intellij.docker.dockerFile.DockerFileType;
import com.intellij.docker.dockerFile.DockerPsiFile;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import ru.adelf.idea.dotenv.api.EnvironmentVariablesProvider;
import ru.adelf.idea.dotenv.api.FileAcceptResult;
import ru.adelf.idea.dotenv.models.KeyValuePsiElement;
import java.util.Collection;
import java.util.Collections;

package ru.adelf.idea.dotenv.docker;



public class DockerfileVariablesProvider implements EnvironmentVariablesProvider {
    @NotNull
    @Override
    public FileAcceptResult acceptFile(VirtualFile file) {
        return file.getFileType().equals(DockerFileType.DOCKER_FILE_TYPE) ? FileAcceptResult.ACCEPTED : FileAcceptResult.NOT_ACCEPTED;
    }

    @NotNull
    @Override
    public Collection<KeyValuePsiElement> getElements(PsiFile psiFile) {
        if(psiFile instanceof DockerPsiFile) {
            DockerfilePsiElementsVisitor visitor = new DockerfilePsiElementsVisitor();
            psiFile.acceptChildren(visitor);

            return visitor.getCollectedItems();
        }

        return Collections.emptyList();