use clippy_utils::diagnostics::span_lint_and_sugg;
use clippy_utils::method_chain_args;
use clippy_utils::res::MaybeQPath;
use clippy_utils::source::snippet_with_applicability;
use rustc_errors::Applicability;
use rustc_hir as hir;
use rustc_lint::{LateContext, Lint};
use rustc_middle::ty;
use rustc_span::Symbol;

/// Wrapper fn for `CHARS_NEXT_CMP` and `CHARS_LAST_CMP` lints.
pub(super) fn check(
    cx: &LateContext<'_>,
    info: &crate::methods::BinaryExprInfo<'_>,
    chain_methods: &[Symbol],
    lint: &'static Lint,
    suggest: &str,
) -> bool {
    if let Some(args) = method_chain_args(info.chain, chain_methods)
        && let hir::ExprKind::Call(fun, [arg_char]) = info.other.kind
        && let Some(id) = fun.res(cx).opt_def_id().map(|ctor_id| cx.tcx.parent(ctor_id))
        && Some(id) == cx.tcx.lang_items().option_some_variant()
    {
        let mut applicability = Applicability::MachineApplicable;
        let self_ty = cx.typeck_results().expr_ty_adjusted(args[0].0).peel_refs();

        if *self_ty.kind() != ty::Str {
            return false;
        }

        span_lint_and_sugg(
            cx,
            lint,
            info.expr.span,
            format!("you should use the `{suggest}` method"),
            "like this",
            format!(
                "{}{}.{suggest}({})",
                if info.eq { "" } else { "!" },
                snippet_with_applicability(cx, args[0].0.span, "..", &mut applicability),
                snippet_with_applicability(cx, arg_char.span, "..", &mut applicability)
            ),
            applicability,
        );

        return true;
    }

    false
}
