using Microsoft.AspNetCore.Mvc.Formatters;
using System;
using System.Collections.Generic;

namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;

public class MarketHeirarchyByEmpResponse
{
    public MarketHeirarchyByEmpResponse()
    {
        Companies = new List<EmpCompanyResponse>();
        SalesOrgs = new List<SalesOrgResponse>();
        DistributionChannels = new List<DistibutionChannleResponse>();
        Regions = new List<RegionResponse>();
        Areas = new List<AreaResponse>();
        Teritories = new List<TeritoryResponse>();
        Plants = new List<PlantResponse>();
    }

    public IList<EmpCompanyResponse> Companies { get; set; } 
    public IList<SalesOrgResponse> SalesOrgs { get; set; } 
    public IList<DistibutionChannleResponse> DistributionChannels { get; set; } 
    public IList<RegionResponse> Regions { get; set; } 
    public IList<AreaResponse> Areas { get; set; } 
    public IList<TeritoryResponse> Teritories { get; set; } 
    public IList<PlantResponse> Plants { get; set; } 
}

public class EmpCompanyResponse
{
    public string CompanyCode { get; set; }
    public string CompanyName { get; set; }
}

public class SalesOrgResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string SalesOrgName { get; set; }
}

public class DistibutionChannleResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string DistributorChannelCode { get; set; }
    public string DistributorChannelName { get; set; }
}

public class RegionResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string RegionCode { get; set; }
    public string RegionName { get; set; }
}

public class AreaResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string RegionCode { get; set; }
    public string AreaCode { get; set; }
    public string AreaName { get; set; }
}

public class TeritoryResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string RegionCode { get; set; }
    public string AreaCode { get; set; }
    public string TeritoryCode { get; set; }
    public string TeritoryName { get; set; }
}

public class PlantResponse
{
    public string CompanyCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string PlantCode { get; set; }
    public string PlantName { get; set; }
}



public class GetBrandResponse
{
    public string BrandCode { get; set; } = string.Empty;
    public string BrandName { get; set; } = string.Empty;
}


public class GetMaterialResponse
{
    public string MaterialName { get; set; }
    public string MaterialCode { get; set; }
    public string TypeCode { get; set; }
    public string TypeName { get; set; }
    public string GroupCode { get; set; }
    public string GroupName { get; set; }
    public string BaseUnitMeasurement { get; set; }
    public string SalesUnitMeasurement { get; set; }
    public decimal UnitConversionValue { get; set; }
    public string BrandCode { get; set; }
    public string BrandName { get; set; }
    public string SalesOrg { get; set; }
}

public class GetMaterialPriceResponse
{
    public string SalesOrgCode { get; set; }
    public string CustomerCode { get; set; }
    public string MaterialCode { get; set; }
    public decimal BasePrice { get; set; }
}

public class GetCustomerResponse
{
    public string CustomerCode { get; set; }
    public string CustomerName { get; set; }
    public string AccountGroupCode { get; set; }
    public string AccountGroupDescription { get; set; }
    public string DistributionChannelCode { get; set; }
    public string DistributionChannelName { get; set; }
    public string DivisionCode { get; set; }
    public string DivisionName { get; set; }
    public string MobileNumber {  get; set; }
    public string EmailAddress { get; set;  }
    public string TaxNumber { get; set; }
    public string SalesGroupCode { get; set; }
    public string SalesGroupName { get; set; }
    public string CustomerGroupCode { get; set; }
    public string CustomerGroupName { get; set; }
    public string CustomerPriceGroupCode { get; set; }
    public string CustomerPriceGroupName { get; set; }
    public string PaymentTermCode { get; set; }
    public string SalesOrgCode { get; set; }
    public string TeritoryCode { get; set; }
    public string PlantCode { get; set; }
    public bool IsCreditCustomer { get; set; }
    public decimal CreditLimit { get; set; }
    public decimal CreditBalance { get; set; }
    public decimal CreditAvailable => CreditLimit - CreditBalance;
    public decimal CreditOverdue { get; set; }
}


public class GetAttendanceByEmpResponse
{
    public DateTime? AttendanceDate { get; set; }
    public string EmployeeNumber { get; set; }
    public TimeSpan? CheckInTime { get; set; }
    public string? CheckInLatitude { get; set; }
    public string? CheckInLongitude { get; set; }
    public string? CheckInLocationName { get; set; }
    public TimeSpan? CheckOutTime { get; set; }
    public string? CheckOutLatitude { get; set; }
    public string? CheckOutLongitude { get; set; }
    public string? CheckOutLocationName { get; set; }
    public bool? IsCheckIn => CheckInTime.HasValue ? true : false;
    public bool? IsCheckOut => CheckOutTime.HasValue ? true : false;
}

public class GetDiscountResponse
{
    public string SalesOrgcCode { get; set; }
    public string DiscountCode { get; set; }
    public string DiscountName { get; set; }
    public string DistributorChannelCode { get; set; }
    public string DistributorChannelName { get; set; }
    public string CalculationType { get; set; }

}

public class GetDiscountMaterialResponse
{
    public string DiscountCode { get; set; }
    public string CustomerCode { get; set; }
    public string MaterialCode { get; set; }
    public string UnitOfMeasurement { get; set; }
    public string CalculationType { get; set; }
    public decimal DiscountValue { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

public class GetFOCResponse
{
    public string SalesOrgcCode { get; set; }
    public string FOCCode { get; set; }
    public string FOCName { get; set; }
    public string DistributorChannelCode { get; set; }
    public string DistributorChannelName { get; set; }

}

public class GetFOCMaterialResponse
{
    public string FOCCode { get; set; }
    public string CustomerCode { get; set; }
    public string MaterialCode { get; set; }
    public string UnitOfMeasurement { get; set; }
    public decimal MinimumOrderQty { get; set; }
    public decimal ForQuantity { get; set; }
    public decimal FreeQty { get; set; }
    public string FOCUnitOfMeasurement { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}


public class GetPaymentTermResponse
{
    public int PaymentTermId { get; set; }
    public string PaymentTermCode { get; set; }
    public string PaymentTermDescription { get; set; }
    public string SalesOrgCode { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string PaymentTermType { get; set; }
}

public class GetMaterialStockReponse
{
    public string PlantCode { get;set;  }
    public string MaterialCode { get; set; }
    public decimal AvailableStock { get; set; }
}