using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace Strata.Code.DataAccess.Models;

[Table("BudgetConfig", Schema = "fp")]
[Index("BudgetConfigId", Name = "NCNU_BudgetConfig_BudgetConfigID")]
[Index("FiscalYearId", Name = "NCNU_BudgetConfig_FiscalYearID")]
public partial class BudgetConfig
{
    [Key]
    [Column("BudgetConfigGUID")]
    public Guid BudgetConfigGuid { get; set; }

    [Column("FiscalYearID")]
    public short FiscalYearId { get; set; }

    [Column("BudgetConfigID")]
    public short BudgetConfigId { get; set; }

    [Unicode(false)]
    public string ChargeMasterConfigJson { get; set; } = null!;

    [Column(TypeName = "smalldatetime")]
    public DateTime DateModified { get; set; }

    [Column(TypeName = "smalldatetime")]
    public DateTime DatePublished { get; set; }

    [StringLength(100)]
    public string BudgetConfigName { get; set; } = null!;

    public bool IsActive { get; set; }

    [StringLength(2000)]
    public string Comments { get; set; } = null!;

    public bool IsOverUnderFundedUsed { get; set; }

    [Column("IsFTEHidden")]
    public bool IsFtehidden { get; set; }

    public bool IsProjectionHidden { get; set; }

    public bool IsArchived { get; set; }

    public bool IsProjectCurrentYear { get; set; }

    [Column("IsMRTracking")]
    public bool IsMrtracking { get; set; }

    [Column("ParentBudgetConfigID")]
    public short ParentBudgetConfigId { get; set; }

    public byte MonthsLoaded { get; set; }

    [Column("CurrentBudgetPhaseID")]
    public byte CurrentBudgetPhaseId { get; set; }

    public byte AdjustmentClassificationSetting { get; set; }

    public bool IsEngineDisabled { get; set; }

    [Column("UseDSForSampling")]
    public bool UseDsforSampling { get; set; }

    [Column("IsGLBudgetHistoryAvailable")]
    public bool IsGlbudgetHistoryAvailable { get; set; }

    public bool IsStaffingBudgetHistoryAvailable { get; set; }

    public bool IsTempoNonStaffingPageAvailable { get; set; }

    public bool IsAdjustmentClassificationEnabled { get; set; }

    public bool IsRestrictDepartmentAccess { get; set; }

    public bool IsChargeMasterRefreshedForDollarImpactReport { get; set; }

    [Column("DefaultReimbursementProjectionMethodID")]
    public int DefaultReimbursementProjectionMethodId { get; set; }

    public bool IsProviderVolumesEnabled { get; set; }

    public bool IsTempoOtherRevenuePageAvailable { get; set; }

    public bool UseEmployeePlanning { get; set; }

    public bool IsUsingSystemGeneratedHistoricalStats { get; set; }

    public bool IsSubAccountCategoriesEnabled { get; set; }

    public bool AreStatisticsAccountsEnabled { get; set; }

    public bool IsProviderCompensationEnabled { get; set; }

    public bool DisplayCategoryInMyBudgets { get; set; }

    public bool IsLocalAdminReadOnly { get; set; }

    public bool IsTargetingEmailEnabled { get; set; }

    [Column("AllowLocalAdminAddEmpAddFTEPlanEditor")]
    public bool AllowLocalAdminAddEmpAddFteplanEditor { get; set; }

    public bool AllowLocalAdminAddEmpAddJobCodeMyBudgets { get; set; }

    public bool AllowLocalAdminAddAccountPlanEditor { get; set; }

    public bool AllowLocalAdminAddAccountMyBudgets { get; set; }

    public bool IsBudgetClosed { get; set; }

    public bool IsStatisticsBudgetHistoryAvailable { get; set; }

    public bool IsImpactReportsEnabled { get; set; }

    [Column("DefaultReimbursementNetRevenueModelID")]
    public int DefaultReimbursementNetRevenueModelId { get; set; }

    public bool IsProviderPlanningEnabled { get; set; }

    public bool IsUsedForReportComparison { get; set; }

    public bool UseProviderSource { get; set; }

    public bool IsProjectionLockedOnMyBudget { get; set; }

    public bool IsBudgetLockedOnMyBudget { get; set; }

    public bool EnableExceptionActionItems { get; set; }

    public bool IsWorkWeekOverrideCheckIgnored { get; set; }

    [InverseProperty("BudgetConfig")]
    public virtual ICollection<DepartmentChargeVolumeAdjustment> DepartmentChargeVolumeAdjustments { get; set; } = new List<DepartmentChargeVolumeAdjustment>();

    [InverseProperty("BudgetConfig")]
    public virtual ICollection<GeneralLedgerInitialPlanConfigDetail> GeneralLedgerInitialPlanConfigDetails { get; set; } = new List<GeneralLedgerInitialPlanConfigDetail>();

    [InverseProperty("BudgetConfig")]
    public virtual ICollection<InitialPlanRule> InitialPlanRules { get; set; } = new List<InitialPlanRule>();

    [InverseProperty("BudgetConfig")]
    public virtual ICollection<StaffingInitialPlanConfigDetail> StaffingInitialPlanConfigDetails { get; set; } = new List<StaffingInitialPlanConfigDetail>();
}
