from __future__ import annotations

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


class EmployeeNumberSequence(models.Model):
    """Thread-safe sequence for employee number generation per tenant+prefix.

    Used with select_for_update() in _generate_employee_no to prevent race
    conditions when two employees are created concurrently within a tenant.
    """

    tenant = models.ForeignKey(
        "tenants.Tenant",
        on_delete=models.CASCADE,
        related_name="employee_number_sequences",
        verbose_name=_("tenant"),
    )
    prefix = models.CharField(_("prefix"), max_length=20)
    last_seq = models.PositiveIntegerField(_("last sequence"), default=0)

    class Meta:
        db_table = "hr_employee_number_sequence"
        verbose_name = _("Employee Number Sequence")
        verbose_name_plural = _("Employee Number Sequences")
        constraints = [
            models.UniqueConstraint(
                fields=["tenant", "prefix"],
                name="hr_empnoseq_unique_tenant_prefix",
            )
        ]

    def __str__(self) -> str:
        return f"{self.prefix} — seq {self.last_seq} (tenant {self.tenant_id})"
