/**
 * 主题系统使用示例
 * 
 * 展示四种不同的主题样式使用方式
 */

import { ScrollView, View, Text, TouchableOpacity } from 'react-native';
import { Stack } from 'expo-router';
import {
  useColorScheme,
  useThemeColors,
  useThemeInfo,
  commonStyles,
  createThemeStyles,
  ThemedText,
  ThemedView,
} from '@/theme';

// 方式 3: 创建自定义主题样式（推荐用于复杂组件）
const customStyles = createThemeStyles((colors) => ({
  header: {
    backgroundColor: colors.primary,
    padding: 20,
    borderRadius: 12,
    marginBottom: 16,
  },
  headerText: {
    color: '#FFFFFF',
    fontSize: 24,
    fontWeight: 'bold',
    textAlign: 'center',
  },
  section: {
    backgroundColor: colors.card,
    padding: 16,
    borderRadius: 8,
    marginBottom: 16,
    borderWidth: 1,
    borderColor: colors.border,
  },
  sectionTitle: {
    color: colors.text,
    fontSize: 18,
    fontWeight: '600',
    marginBottom: 12,
  },
  codeBlock: {
    backgroundColor: colors.backgroundTertiary,
    padding: 12,
    borderRadius: 6,
    marginTop: 8,
  },
  codeText: {
    color: colors.textSecondary,
    fontSize: 12,
    fontFamily: 'monospace',
  },
}));

export default function ThemeExampleScreen() {
  const theme = useColorScheme();
  const colors = useThemeColors();
  const { isDark } = useThemeInfo();
  const s = commonStyles[theme]; // 通用样式类
  const custom = customStyles[theme]; // 自定义样式

  return (
    <>
      <Stack.Screen
        options={{
          title: '主题系统示例',
          headerStyle: {
            backgroundColor: colors.background,
          },
          headerTintColor: colors.text,
        }}
      />
      <ScrollView style={s.containerPadded}>
        {/* 自定义样式示例 */}
        <View style={custom.header}>
          <Text style={custom.headerText}>
            主题系统使用示例
          </Text>
          <Text style={[custom.headerText, { fontSize: 14, marginTop: 8 }]}>
            当前主题: {theme} {isDark ? '🌙' : '☀️'}
          </Text>
        </View>

        {/* 方式 1: 使用主题组件 */}
        <View style={custom.section}>
          <Text style={custom.sectionTitle}>
            方式 1: 使用主题组件
          </Text>
          <ThemedView style={{ padding: 12, borderRadius: 6 }}>
            <ThemedText type="title">这是标题</ThemedText>
            <ThemedText type="subtitle">这是副标题</ThemedText>
            <ThemedText>这是普通文本</ThemedText>
          </ThemedView>
          <View style={custom.codeBlock}>
            <Text style={custom.codeText}>
              {`import { ThemedText, ThemedView } from '@/theme';

<ThemedView>
  <ThemedText type="title">标题</ThemedText>
</ThemedView>`}
            </Text>
          </View>
        </View>

        {/* 方式 2: 使用通用样式类 */}
        <View style={custom.section}>
          <Text style={custom.sectionTitle}>
            方式 2: 使用通用样式类（类似 CSS 类名）
          </Text>
          <View style={s.card}>
            <Text style={s.textTitle}>卡片标题</Text>
            <Text style={s.textSecondary}>卡片描述文本</Text>
            <View style={s.spacingMd} />
            <TouchableOpacity style={s.button}>
              <Text style={s.buttonText}>主要按钮</Text>
            </TouchableOpacity>
            <View style={s.spacingSm} />
            <TouchableOpacity style={s.buttonOutline}>
              <Text style={s.buttonTextOutline}>次要按钮</Text>
            </TouchableOpacity>
          </View>
          <View style={custom.codeBlock}>
            <Text style={custom.codeText}>
              {`import { useColorScheme, commonStyles } from '@/theme';

const theme = useColorScheme();
const s = commonStyles[theme];

<View style={s.card}>
  <Text style={s.textTitle}>标题</Text>
  <TouchableOpacity style={s.button}>
    <Text style={s.buttonText}>按钮</Text>
  </TouchableOpacity>
</View>`}
            </Text>
          </View>
        </View>

        {/* 方式 3: 使用自定义主题样式 */}
        <View style={custom.section}>
          <Text style={custom.sectionTitle}>
            方式 3: 使用自定义主题样式（推荐）
          </Text>
          <View style={{ padding: 12 }}>
            <Text style={{ color: colors.text }}>
              本页面的 header 和 section 就是使用自定义主题样式创建的
            </Text>
          </View>
          <View style={custom.codeBlock}>
            <Text style={custom.codeText}>
              {`import { createThemeStyles } from '@/theme';

const styles = createThemeStyles((colors) => ({
  header: {
    backgroundColor: colors.primary,
    padding: 20,
  },
  headerText: {
    color: '#FFFFFF',
    fontSize: 24,
  },
}));

const theme = useColorScheme();
<View style={styles[theme].header}>
  <Text style={styles[theme].headerText}>标题</Text>
</View>`}
            </Text>
          </View>
        </View>

        {/* 方式 4: 使用 Hooks + 内联样式 */}
        <View style={custom.section}>
          <Text style={custom.sectionTitle}>
            方式 4: 使用 Hooks + 内联样式（动态场景）
          </Text>
          <View style={{
            backgroundColor: colors.backgroundSecondary,
            padding: 16,
            borderRadius: 8,
          }}>
            <Text style={{ color: colors.text, fontSize: 16 }}>
              这是使用 useThemeColors() 动态获取颜色的文本
            </Text>
            <View style={{ height: 12 }} />
            <Text style={{ color: colors.textSecondary, fontSize: 14 }}>
              适合需要动态计算样式的场景
            </Text>
          </View>
          <View style={custom.codeBlock}>
            <Text style={custom.codeText}>
              {`import { useThemeColors } from '@/theme';

const colors = useThemeColors();

<View style={{
  backgroundColor: colors.background,
  padding: 16,
}}>
  <Text style={{ color: colors.text }}>
    动态文本
  </Text>
</View>`}
            </Text>
          </View>
        </View>

        {/* 颜色展示 */}
        <View style={custom.section}>
          <Text style={custom.sectionTitle}>
            主题颜色展示
          </Text>
          <View style={{ flexDirection: 'row', flexWrap: 'wrap', gap: 8 }}>
            {Object.entries(colors).map(([key, value]) => (
              <View
                key={key}
                style={{
                  backgroundColor: value as string,
                  padding: 8,
                  borderRadius: 6,
                  minWidth: 100,
                  borderWidth: 1,
                  borderColor: colors.border,
                }}
              >
                <Text style={{
                  color: key.includes('background') || key.includes('card') || key.includes('input')
                    ? colors.text
                    : '#FFFFFF',
                  fontSize: 10,
                  fontWeight: '600',
                }}>
                  {key}
                </Text>
                <Text style={{
                  color: key.includes('background') || key.includes('card') || key.includes('input')
                    ? colors.textSecondary
                    : '#FFFFFF',
                  fontSize: 8,
                }}>
                  {value}
                </Text>
              </View>
            ))}
          </View>
        </View>

        {/* 底部间距 */}
        <View style={s.spacingXl} />
      </ScrollView>
    </>
  );
}

