using AutoMapper; using Common.Dtos.Company; using Hushian.Application.Contracts.Persistence; using Hushian.Application.Models; using Hushian.Application.Validation; using Hushian.Domain.Entites; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; namespace Hushian.Application.Services { public class CompanyService { private readonly IGenericRepository _CompanyRepository; private readonly VerificationService _VerificationService; private readonly IMapper _mapper; public async Task> RegisterCompany(RegisterCompanyDto dto) { ResponseBase Response = new(); var newCompany = await NewCompany(dto); if (newCompany.Success) { var id = await Verifi(dto.Mobile); Response.Value = id; Response.Success = id != 0; } else Response.Errors.AddRange(newCompany.Errors); return Response; } public async Task GETCompanyinformation(int CompanyID) { var company = await _CompanyRepository.Get().FirstOrDefaultAsync(f => f.ID == CompanyID); return _mapper.Map(company); } public async Task> EditCompany(ReadANDUpdate_CompanyDto model, int CompanyID) { ResponseBase Response = new(); if (!string.IsNullOrEmpty(model.FullNameManager) && !model.FullNameManager.IsOnlyPersianLetters()) Response.Errors.Add("نام مدیر باید کاملا به صورت فارسی باشد"); else if (!string.IsNullOrEmpty(model.FullName) && !model.FullName.IsOnlyPersianLetters()) Response.Errors.Add("نام شرکت باید کاملا به صورت فارسی باشد"); else if (!string.IsNullOrEmpty(model.Email) && !model.Email.IsValidEmail()) Response.Errors.Add("پست الکترونیکی صحیح نمی باشد"); else if (!string.IsNullOrEmpty(model.WebSite) && !model.WebSite.IsValidWebsite()) Response.Errors.Add("وب سایت صحیح نمی باشد"); else if (model.logo != null && !model.logo.IsValidImage()) Response.Errors.Add("تصویر نمی تواند از 5 مگ بیشتر باشد"); else { try { var company = await _CompanyRepository.Get().FirstOrDefaultAsync(f => f.ID == CompanyID); company.FullNameManager = model.FullNameManager; company.FullName = model.FullName; company.Email = model.Email; company.WebSite = model.WebSite; company.logo = model.logo; if (await _CompanyRepository.UPDATEBool(company)) { Response.Success =Response.Value= true; } else { Response.Errors.Add("خطا در ذخیره سازی"); } } catch (Exception) { Response.Errors.Add("خطا سیستمی 02"); } } return Response; } public async Task ChangeAvailableCompany(bool @checked,int CompanyID) { var company = await _CompanyRepository.Get().FirstOrDefaultAsync(f => f.ID == CompanyID); company.Available = @checked; return await _CompanyRepository.UPDATEBool(company); } public async Task ChangeallowBotCompany(bool @checked, int CompanyID) { var company = await _CompanyRepository.Get().FirstOrDefaultAsync(f => f.ID == CompanyID); company.allowBot = @checked; return await _CompanyRepository.UPDATEBool(company); } private async Task> NewCompany(RegisterCompanyDto dto) { ResponseBase Response = new(); List Errors = new List(); if (!dto.Mobile.CheckMobile()) { Response.Errors.Add("فرمت موبایل صحیح نمی باشد"); } else if (!dto.Password.CheckLawPassword(ref Errors)) { Response.Errors.AddRange(Errors); } else if (!dto.FullName.IsOnlyPersianLetters()) { Response.Errors.Add("نام باید کاملا به صورت فارسی باشد"); } else { var AnyCompany = await _CompanyRepository.Get().FirstOrDefaultAsync(a => a.Mobile == dto.Mobile); if (AnyCompany != null && AnyCompany.Verified) { Response.Errors.Add($"موبایل {dto.Mobile} در سیستم ثبت شده"); } else { if (AnyCompany != null && !AnyCompany.Verified) { AnyCompany.Password = dto.Password.GetHash(); AnyCompany.FullName = dto.FullName; AnyCompany.Cdatetime = DateTime.Now; if (await _CompanyRepository.UPDATEBool(AnyCompany)) { Response.Success = true; } else { Response.Errors.Add("خطا در ذخیره سازی اطلاعات کاربر"); } } else { if (await _CompanyRepository.ADDBool(new Company() { })) { Response.Success = true; } else { Response.Errors.Add("خطا در ذخیره سازی اطلاعات کاربر"); } } } } return Response; } private async Task Verifi(string Mobile) => await _VerificationService.GenerateCodeByPhoneNumberConfirmed(Mobile); } }