using Manager.DTOs;
using ManagerService.DTOs;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace ManagerService.Data
{
///
/// Section Information
///
[Index(nameof(InstanceId))]
public abstract class Section : IAuditableEntity
{
[Key]
[Required]
public string Id { get; set; }
[Required]
public string Label { get; set; } // Use in manager
[Required]
[Column(TypeName = "jsonb")]
public List Title { get; set; }
[Column(TypeName = "jsonb")]
public List Description { get; set; }
public int Order { get; set; }
[Required]
public string ConfigurationId { get; set; } // Parent id
public string ImageId { get; set; }
public string ImageSource { get; set; }
[Required]
public SectionType Type { get; set; }
[Required]
public bool IsSubSection { get; set; }
public string ParentId { get; set; } // only if it's an subsection
public DateTime DateCreation { get; set; }
public DateTime DateUpdate { get; set; }
[Required]
public string InstanceId { get; set; }
public bool IsBeacon { get; set; }
public int? BeaconId { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
public int? MeterZoneGPS { get; set; }
public bool IsActive { get; set; } = true;
///
/// Texte de la section dans une langue, tel qu'il sera indexé pour le guide IA.
/// Rend une chaîne vide quand la section ne porte rien d'exploitable dans cette langue.
///
///
/// Abstraite, et pas virtuelle avec un comportement par défaut : la collecte des
/// ressources vivait dans un switch centralisé, un nouveau sous-type n'obligeait
/// personne à le mettre à jour, et il est devenu faux en silence. Ici le compilateur
/// réclame l'implémentation.
///
public abstract string GetEmbeddableText(string language);
///
/// Ids des ressources référencées par la section, pour l'export hors ligne.
/// null rend toutes les langues.
///
public abstract IEnumerable GetReferencedResourceIds(string language = null);
/// Titre et description, communs à tous les sous-types.
protected string BaseText(string language) =>
SectionText.JoinText(SectionText.Translate(Title, language), SectionText.Translate(Description, language));
/// Vignette de la section, commune à tous les sous-types.
protected IEnumerable BaseResourceIds() => SectionText.ResourceId(ImageId);
public SectionDTO ToDTO()
{
return new SectionDTO()
{
id = Id,
label = Label,
title = Title,
description = Description,
isActive = IsActive,
order = Order,
type = Type,
imageId = ImageId,
imageSource = ImageSource,
configurationId = ConfigurationId,
isSubSection = IsSubSection,
parentId = ParentId,
dateCreation = DateCreation,
instanceId = InstanceId,
isBeacon = IsBeacon,
beaconId = BeaconId,
latitude = Latitude,
longitude = Longitude,
meterZoneGPS = MeterZoneGPS,
};
}
}
}