package com.secureline.ui;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SecureLineDashboardTile extends LinearLayout {
    private final TextView labelView;
    private final TextView descriptionView;
    private final TextView valueView;
    private final ImageButton copyButton;

    public SecureLineDashboardTile(Context context) { this(context, null); }
    public SecureLineDashboardTile(Context context, AttributeSet attrs) { this(context, attrs, 0); }
    public SecureLineDashboardTile(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOrientation(VERTICAL);
        setGravity(Gravity.START);
        setPadding(dp(16), dp(14), dp(12), dp(14));
        setMinimumHeight(dp(88));
        setBackgroundResource(R.drawable.sl_dashboard_tile_background);

        LinearLayout top = new LinearLayout(context);
        top.setOrientation(HORIZONTAL);
        top.setGravity(Gravity.CENTER_VERTICAL);
        addView(top, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        labelView = new TextView(context);
        labelView.setTextAppearance(R.style.SecureLineUI_Text_Label);
        labelView.setTextColor(getResources().getColor(R.color.sl_color_text_muted, context.getTheme()));
        top.addView(labelView, new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f));

        copyButton = new ImageButton(context);
        copyButton.setImageResource(R.drawable.sl_ic_copy);
        copyButton.setBackgroundColor(android.graphics.Color.TRANSPARENT);
        copyButton.setPadding(dp(6), dp(6), dp(6), dp(6));
        copyButton.setContentDescription(context.getString(R.string.sl_copy_value));
        top.addView(copyButton, new LayoutParams(dp(32), dp(32)));
        copyButton.setOnClickListener(v -> copyValue());

        valueView = new TextView(context);
        valueView.setTextAppearance(R.style.SecureLineUI_Text_Heading);
        valueView.setMaxLines(3);
        valueView.setEllipsize(null);
        valueView.setTextSize(15);
        valueView.setBreakStrategy(android.text.Layout.BREAK_STRATEGY_SIMPLE);
        LayoutParams vp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        vp.topMargin = dp(6);
        addView(valueView, vp);

        descriptionView = new TextView(context);
        descriptionView.setTextAppearance(R.style.SecureLineUI_Text_Body);
        descriptionView.setTextColor(getResources().getColor(R.color.sl_color_text_secondary, context.getTheme()));
        descriptionView.setTextSize(12);
        descriptionView.setMaxLines(2);
        descriptionView.setVisibility(GONE);
        LayoutParams dp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        dp.topMargin = dp(5);
        addView(descriptionView, dp);

        boolean copyable = false;
        if (attrs != null) {
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SecureLineDashboardTile);
            setLabel(a.getText(R.styleable.SecureLineDashboardTile_slTileLabel));
            setDescription(a.getText(R.styleable.SecureLineDashboardTile_slTileDescription));
            setValue(a.getText(R.styleable.SecureLineDashboardTile_slTileValue));
            copyable = a.getBoolean(R.styleable.SecureLineDashboardTile_slTileCopyable, false);
            a.recycle();
        }
        setCopyable(copyable);
    }

    public void setLabel(CharSequence value) { labelView.setText(value); }
    public void setDescription(CharSequence value) {
        boolean hasValue = value != null && value.length() > 0;
        descriptionView.setText(value);
        descriptionView.setVisibility(hasValue ? VISIBLE : GONE);
    }
    public void setValue(CharSequence value) { valueView.setText(value); }
    public CharSequence getValue() { return valueView.getText(); }
    public void setValueColor(int color) { valueView.setTextColor(color); }
    public void setCopyable(boolean copyable) { copyButton.setVisibility(copyable ? VISIBLE : GONE); }

    private void copyValue() {
        ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboard != null) clipboard.setPrimaryClip(ClipData.newPlainText(labelView.getText(), valueView.getText()));
    }

    private int dp(int value) { return Math.round(value * getResources().getDisplayMetrics().density); }
}
