package com.paint.sweet.drawing.sweetactivity;

import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import com.paint.sweet.drawing.R;
import com.paint.sweet.drawing.sweetfragment.SettingCenterFragment;
import com.paint.sweet.drawing.sweetfragment.HomeMainFragment;
import com.paint.sweet.drawing.sweetmanager.AppUtils;
import com.paint.sweet.drawing.sweetview.BottomTabScrollView;

public class HomeMainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "HomeActivity";
    // 底部Tab控件
    private BottomTabScrollView tabTraceDraw;
    private BottomTabScrollView tabMineSettings;
    private BottomTabScrollView currentTab;

    // Fragment实例
    private HomeMainFragment homeFragment;
    private SettingCenterFragment settingFragment;
    // Fragment容器ID（确保与布局中的ID一致）
    private static final int FRAGMENT_CONTAINER_ID = R.id.fragment_container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ========== 状态栏适配核心逻辑（最终版） ==========
        // 1. 隐藏系统标题栏（必须放在setContentView前）
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

        // 2. Android 5.0+ 状态栏透明 + 白色文字/图标适配
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            // 基础配置：清除全屏Flag，保留状态栏
            window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

            // 关键：Android 6.0+ 透明状态栏兼容配置
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // 移除深色文字标志，确保白色文字
                window.getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 布局延伸到状态栏
                );
            } else {
                // 5.0-5.1 适配
                window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }

            // 强制设置状态栏为全透明
            window.setStatusBarColor(getResources().getColor(android.R.color.transparent));
        }

        // 3. 调用Utils方法确保状态栏文字为白色（最终确认）
        AppUtils.setStatusBarTextColor(this, false);

        // ========== 原有业务逻辑（完全保留） ==========
        setContentView(R.layout.activity_draw_main);

        // 延迟初始化是为了确保View完全加载，避免空指针
        getWindow().getDecorView().postDelayed(() -> {
            initTabs();
            initFragments();
            // 默认选中第一个Tab和HomeFragment
            switchFragment(homeFragment);
            setCurrentTab(tabTraceDraw);
        }, 100);
    }

    /**
     * 初始化底部Tab：设置图标、文字、点击事件
     * 优化：增加空指针判断，避免控件未找到导致崩溃
     */
    private void initTabs() {
        // 绑定底部Tab控件（关键：确保布局中ID与代码一致）
        tabTraceDraw = findViewById(R.id.tab_trace_draw);
        tabMineSettings = findViewById(R.id.tab_mine_settings);

        // 日志打印：排查控件是否绑定成功
        Log.d(TAG, "tabTraceDraw是否为空：" + (tabTraceDraw == null));
        Log.d(TAG, "tabMineSettings是否为空：" + (tabMineSettings == null));

        // 空指针保护：避免控件未找到时执行后续逻辑
        if (tabTraceDraw == null || tabMineSettings == null) {
            Log.e(TAG, "底部Tab控件绑定失败，请检查布局文件中的ID是否正确");
            return;
        }

        // 设置Tab的图标和文字（适配业务需求）
        tabTraceDraw.setDrawTabData(R.drawable.drawing3, "Trace&Draw");
        tabMineSettings.setDrawTabData(R.drawable.setting2, "More Settings");

        // 设置点击事件
        tabTraceDraw.setOnClickListener(this);
        tabMineSettings.setOnClickListener(this);
    }

    /**
     * 初始化Fragment实例
     * 优化：懒加载，避免提前创建导致资源浪费
     */
    private void initFragments() {
        // 双重检查：确保Fragment只创建一次
        if (homeFragment == null) {
            homeFragment = HomeMainFragment.newInstance();
        }
        if (settingFragment == null) {
            settingFragment = SettingCenterFragment.newInstance();
        }
    }

    /**
     * 切换Fragment
     * 优化：
     * 1. 增加空指针判断
     * 2. 使用commitAllowingStateLoss()，避免Activity状态保存后提交崩溃
     * 3. 统一Fragment管理逻辑
     */
    private void switchFragment(Fragment targetFragment) {
        // 空指针保护
        if (targetFragment == null) {
            Log.e(TAG, "目标Fragment为空，无法切换");
            return;
        }

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();

        // 隐藏所有已添加的Fragment
        if (homeFragment != null && homeFragment.isAdded()) {
            transaction.hide(homeFragment);
        }
        if (settingFragment != null && settingFragment.isAdded()) {
            transaction.hide(settingFragment);
        }

        // 添加目标Fragment（未添加时）
        if (!targetFragment.isAdded()) {
            transaction.add(FRAGMENT_CONTAINER_ID, targetFragment);
        }
        // 显示目标Fragment
        transaction.show(targetFragment);

        // 优化提交方式：避免状态丢失导致的崩溃
        transaction.commitAllowingStateLoss();
    }

    /**
     * 设置当前选中的Tab
     * 优化：增加空指针判断，确保Tab状态切换正常
     */
    private void setCurrentTab(BottomTabScrollView tab) {
        // 空指针保护
        if (tab == null) {
            Log.e(TAG, "要选中的Tab为空");
            return;
        }
        // 取消上一个选中Tab的状态
        if (currentTab != null && currentTab != tab) {
            currentTab.setTabSelected(false);
        }
        // 设置当前Tab为选中状态
        tab.setTabSelected(true);
        currentTab = tab;

        // 日志：方便调试Tab选中状态
        Log.d(TAG, "当前选中Tab：" + (tab == tabTraceDraw ? "Trace&Draw" : "Mine Settings"));
    }

    /**
     * Tab点击事件处理
     * 优化：增加ID判断的健壮性
     */
    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.tab_trace_draw) {
            switchFragment(homeFragment);
            setCurrentTab(tabTraceDraw);
        } else if (id == R.id.tab_mine_settings) {
            switchFragment(settingFragment);
            setCurrentTab(tabMineSettings);
        } else {
            Log.w(TAG, "未知的Tab点击ID：" + id);
        }
    }

    /**
     * 补充：页面恢复时重置状态栏状态，避免切换后台后失效
     */
    @Override
    protected void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            );
            // 重新确认状态栏文字为白色
            AppUtils.setStatusBarTextColor(this, false);
        }
    }

    /**
     * 生命周期优化：避免Fragment内存泄漏
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 清空Fragment引用
        homeFragment = null;
        settingFragment = null;
        // 清空Tab引用
        tabTraceDraw = null;
        tabMineSettings = null;
        currentTab = null;
    }
}