using OmsorgCore.Domain.Common;

namespace OmsorgCore.Domain.Entities;

/// <summary>
/// Core-Objekt "Einrichtung" — CRM-/Kundendatensatz (REQUIREMENTS.md Abschnitt 6, Blueprint 19.2).
/// Adresse und Rechnungsadresse sind getrennte Adressen (z. B. Einsatzort vs. zentrale Buchhaltung
/// eines Trägers), daher jeweils eigene strukturierte Felder statt eines gemeinsamen Freitextfelds.
/// Konditionen (FR-EIN-4, Blueprint 19.2) sind ebenfalls flache, nullable Felder direkt auf dieser
/// Entität — Ausnahme ist die qualifikationsabhängige Bepreisung, siehe <see cref="FacilityQualificationRate"/>.
/// </summary>
public class Facility : AuditableEntity
{
    public string Name { get; set; } = string.Empty;
    public string? FacilityType { get; set; }
    public string? Website { get; set; }

    public string? Street { get; set; }
    public string? PostalCode { get; set; }
    public string? City { get; set; }
    public string? Country { get; set; }

    public string? BillingStreet { get; set; }
    public string? BillingPostalCode { get; set; }
    public string? BillingCity { get; set; }
    public string? BillingCountry { get; set; }

    public string CrmStatus { get; set; } = "Lead";
    public DateTime? FollowUpDueDate { get; set; }

    public decimal? BillingRate { get; set; }
    public decimal? NightSurchargePercent { get; set; }
    public decimal? SaturdaySurchargePercent { get; set; }
    public decimal? SundaySurchargePercent { get; set; }
    public decimal? HolidaySurchargePercent { get; set; }
    // TravelCostMode entscheidet, welches der beiden Felder die Rechnungserstellung (FR-RE-1,
    // sobald umgesetzt) verwendet: "Pauschale" -> TravelCostRate (EUR je Einsatz), "ProKilometer"
    // -> TravelCostPerKm (EUR/km) * EmployeeFacilityDistance.DistanceKm des jeweiligen Mitarbeiters.
    public string TravelCostMode { get; set; } = "Pauschale";
    public decimal? TravelCostRate { get; set; }
    public decimal? TravelCostPerKm { get; set; }
    public decimal? MealAllowanceRate { get; set; }
    public decimal? MinimumHours { get; set; }
    public string? BillingInterval { get; set; }
    public int? PaymentTermDays { get; set; }
    public string? IndividualAgreements { get; set; }
}
