import React, { useState } from 'react';
import {
  View,
  Text,
  StyleSheet,
  ScrollView,
  TouchableOpacity,
  Alert,
  Share,
} from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { Ionicons } from '@expo/vector-icons';
import { useRouter } from 'expo-router';
import { TipCard, RunnerRow } from '../src/components';
import { saveTip } from '../src/services/api';
import { useAppStore } from '../src/store/appStore';
import { formatRaceTime, formatCountdown, formatDistance } from '../src/utils/formatters';
import { buildTipLink } from '../src/utils/deepLinks';
import { useScreenTracking } from '../src/analytics/useAnalytics';
import { analytics } from '../src/analytics';

export default function TipResultScreen() {
  const router = useRouter();

  useScreenTracking('tip_result');
  const { currentTip, selectedRace, resetTipFlow } = useAppStore();
  const [saved, setSaved] = useState(false);
  const [saving, setSaving] = useState(false);

  if (!currentTip) {
    return (
      <SafeAreaView style={styles.container}>
        <View style={styles.errorContainer}>
          <Text style={styles.errorText}>No tip available</Text>
          <TouchableOpacity 
            style={styles.goBackButton}
            onPress={() => router.back()}
          >
            <Text style={styles.goBackText}>Go back</Text>
          </TouchableOpacity>
        </View>
      </SafeAreaView>
    );
  }

  const handleSave = async () => {
    if (saved || saving) return;
    
    setSaving(true);
    try {
      await saveTip(currentTip);
      analytics.track('tip_saved', { tip_id: currentTip.id, race_id: currentTip.race_id });
      setSaved(true);
    } catch (error) {
      Alert.alert('Error', 'Failed to save tip');
    } finally {
      setSaving(false);
    }
  };

  const handleShare = async () => {
    try {
      const deepLink = buildTipLink(currentTip.id);
      await Share.share({
        message: `${currentTip.recommended_bet}\n\n${currentTip.race_info?.track} Race ${currentTip.race_info?.race_number}\n${currentTip.race_info?.start_time ? formatRaceTime(currentTip.race_info.start_time) : ''}\n\nConfidence: ${currentTip.confidence.toUpperCase()}\n\nOpen in TipSharks: ${deepLink}`,
      });
    } catch (error) {
      console.error('Error sharing:', error);
    }
  };

  const handleSchedule = () => {
    router.push('/schedule-builder');
  };

  const handleRefresh = () => {
    router.back();
  };

  const handleDone = () => {
    resetTipFlow();
    router.replace('/(tabs)');
  };

  return (
    <SafeAreaView style={styles.container} edges={['top']}>
      {/* Header */}
      <View style={styles.header}>
        <TouchableOpacity 
          style={styles.backButton} 
          onPress={() => router.back()}
        >
          <Ionicons name="arrow-back" size={24} color="#111827" />
        </TouchableOpacity>
        <Text style={styles.headerTitle}>Your Tip</Text>
        <TouchableOpacity style={styles.doneButton} onPress={handleDone}>
          <Text style={styles.doneButtonText}>Done</Text>
        </TouchableOpacity>
      </View>

      <ScrollView 
        style={styles.scrollView}
        contentContainerStyle={styles.scrollContent}
        showsVerticalScrollIndicator={false}
      >
        {/* Race Info */}
        {currentTip.race_info && (
          <View style={styles.raceInfo}>
            <View style={styles.raceInfoHeader}>
              <Text style={styles.trackName}>{currentTip.race_info.track}</Text>
              <View style={styles.countdownBadge}>
                <Ionicons name="time-outline" size={14} color="#6b7280" />
                <Text style={styles.countdownText}>
                  {formatCountdown(currentTip.race_info.start_time)}
                </Text>
              </View>
            </View>
            <View style={styles.raceDetails}>
              <Text style={styles.raceDetailText}>
                Race {currentTip.race_info.race_number}
              </Text>
              <Text style={styles.raceDetailDot}>•</Text>
              <Text style={styles.raceDetailText}>
                {formatDistance(currentTip.race_info.distance)}
              </Text>
              <Text style={styles.raceDetailDot}>•</Text>
              <Text style={styles.raceDetailText}>
                {currentTip.race_info.race_class}
              </Text>
              <Text style={styles.raceDetailDot}>•</Text>
              <Text style={styles.raceDetailText}>
                {currentTip.race_info.conditions}
              </Text>
            </View>
          </View>
        )}

        {/* Tip Card */}
        <TipCard
          recommendedBet={currentTip.recommended_bet}
          confidence={currentTip.confidence}
          reasons={currentTip.reasons}
          tipId={currentTip.id}
          onSave={handleSave}
          onShare={handleShare}
          onSchedule={handleSchedule}
          onRefresh={handleRefresh}
          saved={saved}
        />

        {/* Runners List */}
        <View style={styles.runnersSection}>
          <View style={styles.runnersSectionHeader}>
            <Text style={styles.runnersSectionTitle}>All Runners</Text>
            <View style={styles.gaugeHelp}>
              <Ionicons name="help-circle-outline" size={16} color="#9ca3af" />
              <Text style={styles.gaugeHelpText}>Model estimates, not guarantees</Text>
            </View>
          </View>
          
          {currentTip.runners
            .sort((a, b) => b.win_probability - a.win_probability)
            .map((runner) => (
              <RunnerRow key={runner.id} runner={runner} />
            ))}
        </View>
      </ScrollView>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#f9fafb',
  },
  errorContainer: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    gap: 16,
  },
  errorText: {
    fontSize: 16,
    color: '#6b7280',
  },
  goBackButton: {
    backgroundColor: '#111827',
    paddingHorizontal: 24,
    paddingVertical: 12,
    borderRadius: 10,
  },
  goBackText: {
    color: '#fff',
    fontWeight: '600',
  },
  header: {
    flexDirection: 'row',
    alignItems: 'center',
    justifyContent: 'space-between',
    paddingHorizontal: 16,
    paddingVertical: 12,
    borderBottomWidth: 1,
    borderBottomColor: '#e5e7eb',
    backgroundColor: '#fff',
  },
  backButton: {
    width: 40,
    height: 40,
    alignItems: 'center',
    justifyContent: 'center',
  },
  headerTitle: {
    fontSize: 18,
    fontWeight: '700',
    color: '#111827',
  },
  doneButton: {
    paddingHorizontal: 16,
    paddingVertical: 8,
  },
  doneButtonText: {
    fontSize: 16,
    fontWeight: '600',
    color: '#3b82f6',
  },
  scrollView: {
    flex: 1,
  },
  scrollContent: {
    padding: 20,
    paddingBottom: 40,
  },
  raceInfo: {
    backgroundColor: '#fff',
    borderRadius: 16,
    padding: 18,
    marginBottom: 16,
  },
  raceInfoHeader: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    marginBottom: 8,
  },
  trackName: {
    fontSize: 20,
    fontWeight: '800',
    color: '#111827',
  },
  countdownBadge: {
    flexDirection: 'row',
    alignItems: 'center',
    backgroundColor: '#f3f4f6',
    paddingHorizontal: 10,
    paddingVertical: 6,
    borderRadius: 16,
    gap: 4,
  },
  countdownText: {
    fontSize: 13,
    fontWeight: '600',
    color: '#374151',
  },
  raceDetails: {
    flexDirection: 'row',
    alignItems: 'center',
    flexWrap: 'wrap',
  },
  raceDetailText: {
    fontSize: 14,
    color: '#6b7280',
  },
  raceDetailDot: {
    fontSize: 14,
    color: '#d1d5db',
    marginHorizontal: 8,
  },
  runnersSection: {
    marginTop: 8,
  },
  runnersSectionHeader: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    marginBottom: 14,
  },
  runnersSectionTitle: {
    fontSize: 18,
    fontWeight: '700',
    color: '#111827',
  },
  gaugeHelp: {
    flexDirection: 'row',
    alignItems: 'center',
    gap: 4,
  },
  gaugeHelpText: {
    fontSize: 12,
    color: '#9ca3af',
  },
});
