package io.mrarm.irc.util.theme.live;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

public class LiveThemeViewFactory implements LayoutInflater.Factory2 {

    private LiveThemeManager mLiveThemeManager;
    private LayoutInflater.Factory2 mParentFactory;

    public LiveThemeViewFactory(LiveThemeManager liveThemeManager,
                                LayoutInflater.Factory2 parentFactory) {
        mLiveThemeManager = liveThemeManager;
        mParentFactory = parentFactory;
    }

    public void setLiveThemeManager(LiveThemeManager liveThemeManager) {
        this.mLiveThemeManager = liveThemeManager;
    }

    public LiveThemeManager getLiveThemeManager() {
        return mLiveThemeManager;
    }

    @Override
    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
        if (mLiveThemeManager != null) {
            if (name.equals("android.support.v7.widget.AlertDialogLayout"))
                ThemedAlertDialog.applyTheme(parent, mLiveThemeManager);
            if (name.equals("TextView"))
                return new ThemedTextView(context, attrs, mLiveThemeManager);
            if (name.equals("EditText"))
                return new ThemedEditText(context, attrs, mLiveThemeManager);
            if (name.equals("Button"))
                return new ThemedButton(context, attrs, mLiveThemeManager);
            if (name.equals("CheckBox"))
                return new ThemedCheckBox(context, attrs, mLiveThemeManager);
            if (name.equals("CheckedTextView"))
                return new ThemedCheckedTextView(context, attrs, mLiveThemeManager);
            if (name.equals("android.support.design.widget.TextInputEditText"))
                return new ThemedTextInputEditText(context, attrs, mLiveThemeManager);
            if (name.equals("android.support.design.widget.ThemedTextInputLayout"))
                return new ThemedTextInputLayout(context, attrs, mLiveThemeManager);
            if (name.equals("android.support.v7.widget.DialogTitle")) {
                View v;
                try {
                    v = (View) Class.forName(name).getConstructor(Context.class, AttributeSet.class)
                            .newInstance(context, attrs);
                } catch (Exception e) {
                    return null;
                }
                int defStyleAttr = android.R.attr.textViewStyle;
                LiveThemeComponent c = new LiveThemeComponent(v.getContext());
                ThemedView.setupTheming(v, c, attrs, defStyleAttr);
                ThemedTextView.setupTheming((TextView) v, c, attrs, defStyleAttr);
                c.setLiveThemeManager(mLiveThemeManager);
                return v;
            }
            if (name.equals("androidx.appcompat.widget.Toolbar"))
                return new ThemedToolbar(context, attrs, mLiveThemeManager);
            if (name.equals("com.google.android.material.appbar.AppBarLayout"))
                return new ThemedAppBarLayout(context, attrs, mLiveThemeManager);
            if (name.equals("com.google.android.material.tabs.TabLayout"))
                return new ThemedTabLayout(context, attrs, mLiveThemeManager);
        }
        if (mParentFactory == null)
            return null;
        return mParentFactory.onCreateView(parent, name, context, attrs);
    }

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {
        return onCreateView(null, name, context, attrs);
    }

}