# Spécifications : Ventes d'Animaux (Général)

## Types de Ventes
- **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé).
- **Libération (Vente rapide)** : Vente au "système" (prix plancher fixe) pour libérer de la place rapidement (optionnelle selon design retenu). *Note : Le cahier des charges privilégie le marché joueurs ; la libération est un mode de vente alternatif.*

## Contraintes
- Un animal malade ou mourant ne peut pas être mis en vente.
- Le transport (Camion) immobilise l'animal pendant la durée de la vente.

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
```json
{
  "sale_id": "uuid",
  "seller_zoo_id": "uuid",
  "seller_player_id": "uuid | null (null si bot)",
  "animal_id": "uuid",
  "sale_type": "enum('auction_adult','auction_baby','release_system')",
  "status": "enum('draft','in_transit','listed','pending_validation','completed','expired','cancelled')",
  "created_at": "timestamp",
  "updated_at": "timestamp",
  "listing": {
    "start_price": "integer",
    "buy_now_price": "integer | null",
    "currency": "enum('coins')",
    "duration_seconds": "integer (3600|14400|86400)",
    "end_at": "timestamp"
  },
  "bids": [
    {
      "bid_id": "uuid",
      "bidder_zoo_id": "uuid",
      "amount": "integer",
      "created_at": "timestamp"
    }
  ],
  "validation": {
    "accepted_bid_id": "uuid | null",
    "pending_until": "timestamp | null (sablier 10 min)",
    "finalized_at": "timestamp | null"
  },
  "transport": {
    "truck_id": "uuid",
    "from_site_id": "uuid",
    "to_site_id": "uuid | null",
    "climate_control": "boolean",
    "insurance": "boolean",
    "transport_started_at": "timestamp",
    "transport_eta_at": "timestamp"
  },
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}
```

### Caractéristiques Initiales
**Total Vendu** : 0 animaux.

### Scores Initiaux
**Réputation Vendeur** : Neutre (0).

## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
**Marché** : Offre publiée par le joueur.

### Conditions de Disparition
**Vente conclue** (Achat par tiers) ou **Annulation** (Retour au zoo).

### Hérédité
**Certificat** : L'acheteur voit les parents et l'arbre généalogique.

## 3. Impacts Environnementaux
### Impact Température
**Transport** : Camion climatisé requis si T° extrême (Coût +10%).

### Impact Milieu (Biome)
**Export** : Le biome d'origine est indiqué (Bonus adaptation si même biome cible).

### Impact Saisons
**Demande** : Varie selon saison (ex: Rennes très demandés en Hiver, Lapins au Printemps).

### Impact Heure / Jour-Nuit
**Enchères** : Souvent le soir (18h-22h) pour maximiser les vues (Prime Time).

## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Vente Reproducteur** : Un animal fertile vaut 2x plus cher.

### Impact Mort
**Assurance** : Remboursement 50% si mort pendant transport (si assurance payée).

### Impact Nourriture
**Panier repas** : Coût inclus dans frais vente (L'animal ne doit pas arriver affamé).

### Impact Attractivité (Visiteurs/Animaux)
**Perte Star** : Vendre son meilleur animal (Légendaire) baisse l'attractivité du zoo (-10%).

### Impact Valeur
**Prix Libération** : 10% de la valeur théorique de l'animal (Prix plancher).
**Prix Enchère** : Potentiellement infini (Offre/Demande).

## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Durée Enchère** : 1h, 4h, 24h (au choix).

### Dépenses (Boutiques/Visiteurs)
**Taxe Salle Vente** : 10% du prix final prélevé par le jeu.

### Trajet Visiteurs
**Départ** : Les visiteurs font signe "au revoir" quand le camion part.

## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
*   **Offre** : Mise en ligne.
*   **Bid** : Nouvelle enchère reçue.
*   **Sold** : Vente terminée.

## 7. Progression
### Tableau des Upgrades
*Note : Compétences Marchand.*
| Niveau | Nom | Avantage |
| :--- | :--- | :--- |
| 1 | Vendeur Rue | Taxe 10% |
| 2 | Négociant | Taxe 8% |
| 3 | Exportateur | Taxe 5%, Visibilité Mondiale |

## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function sellAnimal(animal, price, mode):
  if mode == "RELEASE":
    player.coins += animal.value * 0.10
    removeAnimal(animal)
  else:
    createOffer(animal, price)
    animal.status = "TRANSIT"
```

### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ANIMAL_SOLD` | Succès | "Animal vendu pour {amount} pièces !" |
| `ANIMAL_RELEASED` | Info | "Animal relâché dans la nature." |

# Annexes UX/UI

## 0. Direction Artistique & Vue
*   **Vue** : Isométrique (2.5D).
*   **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
*   **Sprites** : 4 directions.
*   **Interactions** :
    *   **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
    *   **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.


## 1. Expérience Utilisateur (UX)
### Libération (Action)
**Description UX** : Le joueur relâche un animal (vente système).
**Description UI** : Bouton "Libérer" (souvent rouge ou discret pour éviter les erreurs). Confirmation "Êtes-vous sûr ? Vous gagnerez peu (X pièces)".
**Emplacement** : Panneau Animal.
**Intégration** : Option secondaire.
**Navigation** : Clic Libérer -> Confirmer.
**Événements** : `RELEASE_ANIMAL`.

#### Assets
- **Musiques** : `ui_warning_soft.mp3` (jingle court à l’ouverture de confirmation).
- **Sons** : `bird_fly_away.mp3` (bruit de nature positif).
- **Graphiques** : Icône Cage ouverte.
- **Images** : `icon_release.png`, `modal_confirm.png`.
- **Vidéos** : `release_fade.webm` (1.2s non loop, optionnel).
- **Animations** : Animal s'estompe ou court hors de l'écran.
- **Couleurs** : Vert (Nature).
- **Textes** : "Libéré !".
- **Formes** : Bouton danger (rouge) + modal arrondie.
