from django.db import models
from django.utils.translation import gettext_lazy as _


class PlaceView(models.Model):
    """Place View - Track place views"""
    place = models.ForeignKey(
        'places.Place',
        on_delete=models.CASCADE,
        related_name='views',
        verbose_name=_('Place')
    )
    user = models.ForeignKey(
        'accounts.User',
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        related_name='place_views',
        verbose_name=_('User')
    )
    ip_address = models.GenericIPAddressField(blank=True, null=True, verbose_name=_('IP Address'))
    user_agent = models.TextField(blank=True, null=True, verbose_name=_('User Agent'))
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = _('Place View')
        verbose_name_plural = _('Place Views')
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['place', 'created_at']),
            models.Index(fields=['user']),
        ]

    def __str__(self):
        return f'{self.place.name} - {self.created_at}'


class SearchQuery(models.Model):
    """Search Query - Track search queries"""
    user = models.ForeignKey(
        'accounts.User',
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        related_name='search_queries',
        verbose_name=_('User')
    )
    query = models.CharField(max_length=200, verbose_name=_('Query'))
    results_count = models.IntegerField(default=0, verbose_name=_('Results Count'))
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = _('Search Query')
        verbose_name_plural = _('Search Queries')
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['query']),
            models.Index(fields=['user']),
        ]

    def __str__(self):
        return f'{self.query} - {self.results_count} results'
