package home.smart.fly.animations.ui.activity;

import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

import com.bumptech.glide.Glide;

import java.lang.reflect.Field;

import de.hdodenhof.circleimageview.CircleImageView;
import home.smart.fly.animations.R;
import home.smart.fly.animations.internal.DarkWorld;

public class LoadCircleImageActivity extends AppCompatActivity {
    private static final String TAG = "LoadCircleImageActivity";
    private static final String PIC_URL = "http://f.hiphotos.baidu.com/zhidao/pic/item/8b82b9014a90f60326b707453b12b31bb051eda9.jpg";
    private Context mContext;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        setContentView(R.layout.activity_load_circle_image);
        final CircleImageView userAvatar = (CircleImageView) findViewById(R.id.userAvatar);
        final ImageView userAvatar1 = (ImageView) findViewById(R.id.userAvatar1);
        final ImageView gif = findViewById(R.id.gif);
        final ImageView gif_gen = findViewById(R.id.gif_gen);


        findViewById(R.id.load).setOnClickListener(v -> {
            Glide.with(LoadCircleImageActivity.this).load(PIC_URL).into(userAvatar1);
            Glide.with(LoadCircleImageActivity.this).load(PIC_URL).into(userAvatar);


            simpleDarkWorld();
            hackDarkWorld();
        });


    }

    public Object getValue(Object object, String fieldName) {
        if (object == null) {
            return null;
        }
        if (TextUtils.isEmpty(fieldName)) {
            return null;
        }
        Field field = null;
        Class<?> clazz = object.getClass();
        for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
            try {
                field = clazz.getDeclaredField(fieldName);
                field.setAccessible(true);
                return field.get(object);
            } catch (Exception e) {
                //这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。
                //如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了
            }
        }

        return null;
    }


    private void hackDarkWorld() {
        try {
            Class<?> classDarkWorld = Class.forName("home.smart.fly.animations.internal.DarkWorld");
            DarkWorld darkWorld = (DarkWorld) classDarkWorld.newInstance();

            Field msg = classDarkWorld.getDeclaredField("msg");
            Field count = classDarkWorld.getDeclaredField("count");
            msg.setAccessible(true);
            count.setAccessible(true);

            msg.set(darkWorld, "This is hackWorld");
            count.set(darkWorld, 101);
            darkWorld.log();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }

    private void simpleDarkWorld() {
        DarkWorld darkWorld = new DarkWorld();
        darkWorld.log();
    }
}