package com.ativaplay.livestore.notifications;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.GradientDrawable;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Replacement presentation layer for the existing getnote.php response.
 * title/content remain server-controlled. duration is optional; 5s is the fallback.
 */
public final class NotificationCard {
    private NotificationCard() {}

    public static void show(Context context, String title, String content, int durationSeconds) {
        if (context == null) return;
        if ((title == null || title.trim().isEmpty()) && (content == null || content.trim().isEmpty())) return;

        final int seconds = Math.max(1, Math.min(30, durationSeconds <= 0 ? 5 : durationSeconds));
        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        LinearLayout root = new LinearLayout(context);
        root.setOrientation(LinearLayout.VERTICAL);
        root.setPadding(dp(context, 20), dp(context, 18), dp(context, 20), 0);
        GradientDrawable bg = new GradientDrawable();
        bg.setColor(Color.WHITE);
        bg.setCornerRadius(dp(context, 20));
        root.setBackground(bg);

        LinearLayout header = new LinearLayout(context);
        header.setGravity(Gravity.CENTER_VERTICAL);
        TextView icon = text(context, "●", 18, Color.rgb(37, 99, 235));
        icon.setGravity(Gravity.CENTER);
        GradientDrawable iconBg = new GradientDrawable();
        iconBg.setColor(Color.rgb(238, 244, 255));
        iconBg.setCornerRadius(dp(context, 14));
        icon.setBackground(iconBg);
        header.addView(icon, new LinearLayout.LayoutParams(dp(context, 44), dp(context, 44)));

        TextView titleView = text(context, title == null ? "Aviso" : title, 18, Color.rgb(23, 32, 51));
        titleView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        titleView.setPadding(dp(context, 12), 0, 0, 0);
        header.addView(titleView, new LinearLayout.LayoutParams(0, dp(context, 44), 1));
        root.addView(header);

        TextView body = text(context, content == null ? "" : content, 15, Color.rgb(82, 96, 117));
        body.setGravity(Gravity.CENTER_VERTICAL);
        body.setPadding(0, dp(context, 14), 0, dp(context, 18));
        root.addView(body, new LinearLayout.LayoutParams(-1, -2));

        final View progress = new View(context);
        progress.setBackgroundColor(Color.rgb(37, 99, 235));
        root.addView(progress, new LinearLayout.LayoutParams(-1, dp(context, 4)));

        TextView meta = text(context, "Fechando automaticamente em " + seconds + "s", 12, Color.rgb(122, 134, 153));
        meta.setPadding(0, dp(context, 9), 0, dp(context, 14));
        root.addView(meta);

        dialog.setContentView(root);
        Window w = dialog.getWindow();
        if (w != null) {
            w.setBackgroundDrawableResource(android.R.color.transparent);
            w.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            WindowManager.LayoutParams lp = w.getAttributes();
            lp.width = (int) (context.getResources().getDisplayMetrics().widthPixels * .88f);
            lp.dimAmount = .22f;
            w.setAttributes(lp);
        }
        dialog.setCanceledOnTouchOutside(true);
        dialog.setCancelable(true);
        dialog.show();

        final long total = seconds * 1000L;
        progress.setPivotX(0f);
        final ValueAnimator animator = ValueAnimator.ofFloat(1f, 0f);
        animator.setDuration(total);
        animator.addUpdateListener(a -> {
            float f = (Float) a.getAnimatedValue();
            progress.setScaleX(f);
            int left = Math.max(0, (int) Math.ceil(seconds * f));
            meta.setText("Fechando automaticamente em " + left + "s");
        });
        animator.addListener(new AnimatorListenerAdapter() {
            @Override public void onAnimationEnd(Animator animation) { if (dialog.isShowing()) dialog.dismiss(); }
        });
        root.postDelayed(animator::start, 60);
    }

    private static TextView text(Context c, String s, float size, int color) {
        TextView v = new TextView(c);
        v.setText(s);
        v.setTextSize(size);
        v.setTextColor(color);
        return v;
    }
    private static int dp(Context c, int v) { return (int) (v * c.getResources().getDisplayMetrics().density + .5f); }
}
