using foodmarket.Domain.Catalog;
using foodmarket.Domain.Common;

namespace foodmarket.Domain.Organizations;

public class Organization : Entity
{
    public string Name { get; set; } = null!;
    public string CountryCode { get; set; } = "KZ";
    public string? Bin { get; set; }
    public string? Address { get; set; }
    public string? Phone { get; set; }
    public string? Email { get; set; }
    public bool IsActive { get; set; } = true;

    /// <summary>Архивирована ли организация. Архивные не видны пользователям
    /// но данные сохраняются. Из архива можно восстановить или (после 30 дней)
    /// удалить навсегда — этим управляет SuperAdmin.</summary>
    public bool IsArchived { get; set; }
    public DateTime? ArchivedAt { get; set; }

    /// <summary>Account owner (главный владелец, не путать с админами роли).
    /// Это конкретный AppUser, который считается «хозяином» организации;
    /// SuperAdmin может сменить через отдельный action c reason в audit-log.</summary>
    public Guid? AccountOwnerUserId { get; set; }

    /// <summary>Персональный API-токен MoySklad. Храним per-organization чтобы
    /// пользователю не нужно было вводить его каждый раз при импорте.</summary>
    public string? MoySkladToken { get; set; }

    /// <summary>Валюта организации по умолчанию. Если MultiCurrencyEnabled=false,
    /// в UI выбор валюты скрыт — всё в этой валюте.</summary>
    public Guid? DefaultCurrencyId { get; set; }
    public Currency? DefaultCurrency { get; set; }

    /// <summary>Разрешены ли продажи/закупки в нескольких валютах. По умолчанию
    /// false — тогда UI не предлагает выбор валюты, всё в DefaultCurrency.</summary>
    public bool MultiCurrencyEnabled { get; set; }

    /// <summary>Показывать ли пользователю галку «В том числе НДС» на форме товара.
    /// Если false (по умолчанию) — магазин работает с одной ставкой НДС и галка
    /// скрыта, все товары считаются с НДС. Если true — можно для отдельных товаров
    /// (хлеб, медикаменты) снимать галку.</summary>
    public bool ShowVatEnabledOnProduct { get; set; }

    /// <summary>Показывать ли на форме товара и в фильтрах галку «Услуга».
    /// Большинство магазинов продают только физические товары — флаг выключен
    /// по умолчанию, чтобы не захламлять UI.</summary>
    public bool ShowServiceOnProduct { get; set; }

    /// <summary>Показывать ли на форме товара и в фильтрах галку «Маркируемый».
    /// Маркировка требуется только в нишевых категориях (алкоголь, лекарства,
    /// табак) — по умолчанию выключено.</summary>
    public bool ShowMarkedOnProduct { get; set; }

    /// <summary>Показывать ли поля «Минимальный остаток» / «Максимальный остаток»
    /// на карточке товара и одноимённую колонку в списке. Нужно в основном
    /// торговым сетям со свободным местом на полке — по умолчанию выключено.</summary>
    public bool ShowMinMaxStock { get; set; }

    /// <summary>Разрешить ли цены с дробной частью (две цифры после запятой).
    /// По умолчанию false — большинству KZ-магазинов хватает круглых тенге;
    /// если включено, MoneyInput работает с шагом 0.01 и форматирует с .00,
    /// иначе шаг 1 и значения округляются до целого даже при попытке прислать
    /// дробное через API.</summary>
    public bool AllowFractionalPrices { get; set; }

    /// <summary>Показывать ли в карточке товара поле «Эталонная цена».
    /// Default: true.</summary>
    public bool ShowReferencePriceOnProduct { get; set; } = true;

    /// <summary>Показывать ли в карточке товара поле «Страна происхождения».
    /// Default: false. Большинству KZ-магазинов это поле не нужно;
    /// включать для торговцев импортом или маркируемой продукцией.</summary>
    public bool ShowCountryOfOriginOnProduct { get; set; }

    /// <summary>Показывать ли в карточке товара поле «Описание». Default:
    /// false. Описания ведут единицы магазинов; обычно текстовая колонка
    /// просто захламляет карточку.</summary>
    public bool ShowDescriptionOnProduct { get; set; }
}
