// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.refactoring.unwrap;

import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.PyIfStatement;
import com.jetbrains.python.psi.PyPassStatement;
import com.jetbrains.python.psi.PyStatement;
import com.jetbrains.python.psi.PyStatementList;
import com.jetbrains.python.psi.impl.PyIfPartIfImpl;
import org.jetbrains.annotations.NotNull;

import java.util.List;

/**
 * User : ktisha
 */
public class PyIfUnwrapper extends PyUnwrapper {
  public PyIfUnwrapper() {
    super(PyBundle.message("unwrap.if"));
  }

  @Override
  public boolean isApplicableTo(@NotNull PsiElement e) {
    if (e instanceof PyIfPartIfImpl ifPartIf) {
      final PyStatementList statementList = ifPartIf.getStatementList();
      final PyStatement[] statements = statementList.getStatements();
      return statements.length == 1 && !(statements[0] instanceof PyPassStatement) || statements.length > 1;
    }
    return false;
  }

  @Override
  public PsiElement collectAffectedElements(@NotNull PsiElement e, @NotNull List<? super PsiElement> toExtract) {
    super.collectAffectedElements(e, toExtract);
    return PsiTreeUtil.getParentOfType(e, PyIfStatement.class);
  }


  @Override
  protected void doUnwrap(final PsiElement element, final Context context) throws IncorrectOperationException {
    final PyIfStatement ifStatement = PsiTreeUtil.getParentOfType(element, PyIfStatement.class);
    context.extractPart(ifStatement);
    context.delete(ifStatement);
  }
}
