<template>
  <div class="admin-user-detail">
    <div class="header-controls">
      <button @click="goBack" class="back-btn">
        &laquo; Назад к списку пользователей
      </button>
      
      <button 
        v-if="user" 
        @click="toggleUserStatus" 
        class="status-btn"
        :class="user.isActive ? 'block-btn' : 'unblock-btn'"
      >
        {{ user.isActive ? 'Заблокировать' : 'Разблокировать' }}
      </button>
    </div>
    
    <div v-if="loading" class="loading-indicator">
      Загрузка информации о пользователе...
    </div>
    
    <div v-if="error" class="error-message">
      {{ error }}
    </div>
    
    <div v-if="user && !loading" class="user-container">
      <h2>Информация о пользователе</h2>
      
      <div class="user-profile">
        <div class="user-header">
          <div class="user-photo" v-if="userProfilePhoto">
            <img :src="userProfilePhoto" alt="Фото профиля">
          </div>
          <div class="user-photo placeholder" v-else>
            <div class="initials">{{ getUserInitials() }}</div>
          </div>
          
          <div class="user-name-status">
            <h3>{{ user.name }}</h3>
            <span class="status-badge" :class="{ 'active': user.isActive, 'blocked': !user.isActive }">
              {{ user.isActive ? 'Активен' : 'Заблокирован' }}
            </span>
          </div>
        </div>
        
        <div class="user-details">
          <div class="detail-group">
            <div class="detail-item">
              <div class="detail-label">ID</div>
              <div class="detail-value">{{ user._id }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Email</div>
              <div class="detail-value">{{ user.email }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Пол</div>
              <div class="detail-value">{{ getGenderText(user.gender) }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Дата рождения</div>
              <div class="detail-value">{{ formatDate(user.dateOfBirth) }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Возраст</div>
              <div class="detail-value">{{ calculateAge(user.dateOfBirth) }} лет</div>
            </div>
          </div>
          
          <div class="detail-group">
            <div class="detail-item">
              <div class="detail-label">Город</div>
              <div class="detail-value">{{ user.location?.city || 'Не указан' }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Страна</div>
              <div class="detail-value">{{ user.location?.country || 'Не указана' }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Дата регистрации</div>
              <div class="detail-value">{{ formatDate(user.createdAt) }}</div>
            </div>
            <div class="detail-item">
              <div class="detail-label">Последнее посещение</div>
              <div class="detail-value">{{ formatDate(user.lastSeen) }}</div>
            </div>
          </div>
        </div>
        
        <div class="user-bio" v-if="user.bio">
          <h4>О себе</h4>
          <p>{{ user.bio }}</p>
        </div>
      </div>
      
      <div class="user-stats">
        <h3>Статистика активности</h3>
        
        <div class="stats-grid">
          <div class="stat-card">
            <div class="stat-value">{{ user.stats?.messagesCount || 0 }}</div>
            <div class="stat-label">Сообщений</div>
          </div>
          <div class="stat-card">
            <div class="stat-value">{{ user.stats?.conversationsCount || 0 }}</div>
            <div class="stat-label">Диалогов</div>
          </div>
          <div class="stat-card">
            <div class="stat-value">{{ user.stats?.profileViewsCount || 0 }}</div>
            <div class="stat-label">Просмотров профиля</div>
          </div>
          <div class="stat-card">
            <div class="stat-value">{{ user.stats?.matchesCount || 0 }}</div>
            <div class="stat-label">Взаимных симпатий</div>
          </div>
          <div class="stat-card">
            <div class="stat-value">{{ user.stats?.likesGivenCount || 0 }}</div>
            <div class="stat-label">Выражений симпатии</div>
          </div>
        </div>
      </div>
      
      <div class="user-photos" v-if="user.photos && user.photos.length > 0">
        <h3>Фотографии пользователя</h3>
        
        <div class="photos-grid">
          <div 
            v-for="(photo, index) in user.photos" 
            :key="index" 
            class="photo-item"
          >
            <img :src="photo.url" alt="Фото пользователя">
            <div v-if="photo.isProfilePhoto" class="photo-badge">Основное фото</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { ref, onMounted, computed } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import axios from 'axios';

export default {
  name: 'AdminUserDetail',
  props: {
    id: {
      type: String,
      required: true
    }
  },
  setup(props) {
    const router = useRouter();
    const route = useRoute();
    const user = ref(null);
    const loading = ref(false);
    const error = ref(null);
    
    // Получить основное фото пользователя
    const userProfilePhoto = computed(() => {
      if (!user.value || !user.value.photos) return null;
      
      const profilePhoto = user.value.photos.find(p => p.isProfilePhoto);
      return profilePhoto ? profilePhoto.url : (user.value.photos.length > 0 ? user.value.photos[0].url : null);
    });
    
    const loadUserDetails = async () => {
      loading.value = true;
      error.value = null;
      
      try {
        const token = localStorage.getItem('token');
        const response = await axios.get(
          `${import.meta.env.VITE_API_URL}/api/admin/users/${props.id}`,
          {
            headers: {
              Authorization: `Bearer ${token}`
            }
          }
        );
        
        user.value = response.data;
      } catch (err) {
        console.error('Ошибка при загрузке данных пользователя:', err);
        error.value = 'Ошибка при загрузке информации о пользователе. Пожалуйста, попробуйте позже.';
      } finally {
        loading.value = false;
      }
    };
    
    // Переход назад к списку пользователей
    const goBack = () => {
      router.push({ name: 'AdminUsers' });
    };
    
    // Изменение статуса пользователя (блокировка/разблокировка)
    const toggleUserStatus = async () => {
      try {
        loading.value = true;
        
        const token = localStorage.getItem('token');
        const response = await axios.put(
          `${import.meta.env.VITE_API_URL}/api/admin/users/${props.id}/toggle-active`,
          {},
          {
            headers: {
              Authorization: `Bearer ${token}`
            }
          }
        );
        
        // Обновляем статус пользователя
        user.value.isActive = response.data.isActive;
        
        // Показываем уведомление (можно добавить компонент уведомлений)
        alert(response.data.message);
      } catch (err) {
        console.error('Ошибка при изменении статуса пользователя:', err);
        alert('Ошибка при изменении статуса пользователя');
      } finally {
        loading.value = false;
      }
    };
    
    // Получение инициалов пользователя для отображения, если нет фото
    const getUserInitials = () => {
      if (!user.value || !user.value.name) return '?';
      
      return user.value.name
        .split(' ')
        .map(n => n[0])
        .join('')
        .toUpperCase()
        .substring(0, 2);
    };
    
    // Форматирование пола
    const getGenderText = (gender) => {
      switch(gender) {
        case 'male': return 'Мужской';
        case 'female': return 'Женский';
        case 'other': return 'Другой';
        default: return 'Не указан';
      }
    };
    
    // Расчет возраста
    const calculateAge = (dateOfBirthString) => {
      if (!dateOfBirthString) return 'Не указан';
      
      const dob = new Date(dateOfBirthString);
      const today = new Date();
      let age = today.getFullYear() - dob.getFullYear();
      const monthDiff = today.getMonth() - dob.getMonth();
      
      if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < dob.getDate())) {
        age--;
      }
      
      return age;
    };
    
    // Форматирование даты
    const formatDate = (dateString) => {
      if (!dateString) return 'Не указана';
      
      const date = new Date(dateString);
      return date.toLocaleString('ru-RU', {
        day: '2-digit',
        month: '2-digit',
        year: 'numeric',
        hour: '2-digit',
        minute: '2-digit'
      });
    };
    
    onMounted(() => {
      loadUserDetails();
    });
    
    return {
      user,
      loading,
      error,
      userProfilePhoto,
      goBack,
      toggleUserStatus,
      getUserInitials,
      getGenderText,
      calculateAge,
      formatDate
    };
  }
}
</script>

<style scoped>
.admin-user-detail {
  padding-bottom: 2rem;
}

.header-controls {
  display: flex;
  justify-content: space-between;
  margin-bottom: 1.5rem;
}

.back-btn {
  padding: 0.5rem 1rem;
  background-color: #f5f5f5;
  border: 1px solid #ddd;
  border-radius: 4px;
  cursor: pointer;
  color: #333;
}

.status-btn {
  padding: 0.5rem 1rem;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-weight: 500;
}

.block-btn {
  background-color: #ffebee;
  color: #d32f2f;
}

.unblock-btn {
  background-color: #e8f5e9;
  color: #2e7d32;
}

.loading-indicator {
  text-align: center;
  padding: 2rem;
  color: #666;
}

.error-message {
  padding: 1rem;
  background-color: #ffebee;
  color: #d32f2f;
  border-radius: 4px;
  margin-bottom: 1rem;
}

h2 {
  margin-top: 0;
  margin-bottom: 1.5rem;
  color: #333;
}

h3 {
  margin-top: 0;
  margin-bottom: 1rem;
  color: #333;
}

.user-container {
  display: flex;
  flex-direction: column;
  gap: 2rem;
}

.user-profile {
  background-color: white;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
  padding: 1.5rem;
}

.user-header {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  margin-bottom: 1.5rem;
}

.user-photo {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  overflow: hidden;
}

.user-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.user-photo.placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #ff3e68;
  color: white;
  font-size: 2rem;
  font-weight: bold;
}

.user-name-status {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.user-name-status h3 {
  margin: 0;
  font-size: 1.5rem;
}

.status-badge {
  display: inline-block;
  padding: 0.3rem 0.6rem;
  border-radius: 20px;
  font-size: 0.875rem;
  font-weight: 500;
}

.status-badge.active {
  background-color: #e8f5e9;
  color: #2e7d32;
}

.status-badge.blocked {
  background-color: #ffebee;
  color: #d32f2f;
}

.user-details {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1.5rem;
}

.detail-group {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.detail-item {
  display: flex;
  flex-direction: column;
}

.detail-label {
  font-size: 0.875rem;
  color: #666;
  margin-bottom: 0.25rem;
}

.detail-value {
  font-weight: 500;
}

.user-bio {
  margin-top: 1.5rem;
}

.user-bio h4 {
  margin-top: 0;
  margin-bottom: 0.5rem;
  color: #333;
}

.user-bio p {
  margin: 0;
  line-height: 1.5;
  color: #444;
  white-space: pre-wrap;
}

.user-stats {
  background-color: white;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
  padding: 1.5rem;
}

.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 1rem;
}

.stat-card {
  background-color: #f9f9f9;
  border-radius: 6px;
  padding: 1rem;
  text-align: center;
}

.stat-value {
  font-size: 1.75rem;
  font-weight: bold;
  color: #ff3e68;
  margin-bottom: 0.5rem;
}

.stat-label {
  color: #666;
  font-size: 0.9rem;
}

.user-photos {
  background-color: white;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
  padding: 1.5rem;
}

.photos-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 1rem;
}

.photo-item {
  position: relative;
  border-radius: 8px;
  overflow: hidden;
  aspect-ratio: 1/1;
}

.photo-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.photo-badge {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0,0,0,0.7);
  color: white;
  padding: 0.3rem;
  font-size: 0.8rem;
  text-align: center;
}
</style>