package com.artisanic.helper.artui;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import com.artisanic.helper.ad.AdsInsUtil;
import com.artisanic.helper.ad.LoadListener;
import com.artisanic.helper.artmanager.ArtUtils;
import com.artisanic.helper.test.R;
import com.artisanic.helper.test.databinding.MainLayoutBinding;
import com.google.android.material.tabs.TabLayout;
import com.tradplus.ads.base.bean.TPAdInfo;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class MainActivity extends AppCompatActivity {

    private MainLayoutBinding binding;
    private List<Fragment> listFragment = new ArrayList<>();
    private String[] permissions;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        binding = MainLayoutBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        binding.imSearch.setOnClickListener(v -> {
            Intent intent = new Intent(MainActivity.this, SearchActivity.class);
            startActivity(intent);
        });

        listFragment.add(MainFragment.newInstance());
        listFragment.add(SettingFragment.newInstance());
        onTabInit();
        binding.viewPager2.setAdapter(new FragmentStateAdapter(this) {
            @NonNull
            @Override
            public Fragment createFragment(int position) {
                return listFragment.get(position);
            }

            @Override
            public int getItemCount() {
                return listFragment.size();
            }
        });
        bingTabVp();
        updateSearchBtnVisibility(0);
        onInitPermission();
    }

    private void updateSearchBtnVisibility(int position) {
        if (position == 0) {
            binding.imSearch.setVisibility(View.VISIBLE);
        } else {
            binding.imSearch.setVisibility(View.GONE);
        }
    }

    private void onInitPermission() {
        permissions = new String[]{Manifest.permission.CAMERA};
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES};
        } else {
            permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
        }
        if (!ArtUtils.checkPermission(this, permissions)) {
            ActivityCompat.requestPermissions(this, permissions, 0);
        }
    }

    private void bingTabVp() {
        binding.tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                ImageView icon = Objects.requireNonNull(tab.getCustomView()).findViewById(R.id.im_icon);
                icon.setSelected(true);
                binding.viewPager2.setCurrentItem(tab.getPosition());
                updateSearchBtnVisibility(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                ImageView icon = Objects.requireNonNull(tab.getCustomView()).findViewById(R.id.im_icon);
                icon.setSelected(false);
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
        binding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                Objects.requireNonNull(binding.tab.getTabAt(position)).select();
                updateSearchBtnVisibility(position);
            }
        });
    }

    private void onTabInit() {
        for (int i = 0; i < listFragment.size(); i++) {
            TabLayout.Tab tab = binding.tab.newTab();
            View inflate = LayoutInflater.from(this).inflate(R.layout.item_tab_custom_view, null, false);
            ImageView icon = inflate.findViewById(R.id.im_icon);
            TextView textView = inflate.findViewById(R.id.textView);
            if (i == 0) {
                textView.setText(getString(R.string.tab_draw));
                icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.tab_home));
            } else {
                textView.setText(getString(R.string.tab_set));
                icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.tab_setting));
            }
            tab.setCustomView(inflate);
            binding.tab.addTab(tab);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 0) {
            if (ArtUtils.checkPermission(this, permissions)) {
                Toast.makeText(this, getString(R.string.Permission), Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadAd();
    }

    private void loadAd() {
        AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new LoadListener() {
            @Override
            public void loaded(@NotNull TPAdInfo ad) {

            }

            @Override
            public void loadFailed(@NotNull String error) {

            }
        });
        AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new LoadListener() {
            @Override
            public void loaded(@NotNull TPAdInfo ad) {

            }

            @Override
            public void loadFailed(@NotNull String error) {

            }
        });
    }
}