<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\File;

use App\Http\Requests\AdvertCattleRequest;
use App\Models\AdvertMaster;
use App\Models\CattleSales;
use App\Models\CattlePurchasing;
use App\Models\CattlePurchBreeds;
use App\Models\CattleSalesBreeds;
use App\Models\AdType;
use App\Models\ServiceType;
use App\Models\Fixval;
use App\Models\CattleBreed;
use App\Models\ImageSave;
use App\Models\DocApprovals;
use App\Models\Images;
use Auth;
use Carbon\Carbon;

use App\Http\Controllers\BaseController;

class AdvertCattleController extends BaseController
{

	public function createCatlAd(AdvertCattleRequest $request){

		$data = $request->all();

		$full_data = array();
		$master_advert_id	  = $data['advert_id'];
		$master_advert  	  = AdvertMaster::getAdvertById($data['advert_id']);

		if(empty($data['advert_id'])){
			$master_advert    = AdvertMaster::storeAdvert($data);
			$master_advert_id = $master_advert['advert_id'];
		}

		$logedUserRegNo = Auth::user()->regno;

		if($master_advert_id){
			$catles_ad['advert_id']			=  $master_advert_id;
			$catles_ad['date_created']		=  Carbon::now()->format('Y-m-d H:i:s');
			// $catles_ad['sale_remarks']	=  $data['sale_remarks'];
			$catles_ad['created_by'] 		=  $logedUserRegNo;  
			$catles_ad['edited_by'] 		=  $logedUserRegNo;	

			switch ($data) {
				case ((empty($data['advert_id'])) && ($data['advert_type'] == 'SELLER')):
				$cattle_ad_id = CattleSales::storeCattleSale($catles_ad)['ctlsale_rowno'];
				break;

				case ((!empty($data['advert_id'])) && ($data['advert_type'] == 'SELLER')):
				$cattle_ad_id	= CattleSales::getExtCattleSalead($data['advert_id'])['ctlsale_rowno'];
				break;

				case ((empty($data['advert_id'])) && ($data['advert_type'] == 'BUYER')):
				$cattle_ad_id	= CattlePurchasing::storeCattlePurchasing($catles_ad)['ctlpur_rowno'];
				break;

				case ((!empty($data['advert_id'])) && ($data['advert_type'] == 'BUYER')):
				$cattle_ad_id	= CattlePurchasing::getExtCattlePurshasingad($data['advert_id'])['ctlpur_rowno'];
				break;
			}

			if($cattle_ad_id){

				switch ($data) {
					case ($data['advert_type'] == 'SELLER'):
					$cattle_row_nm = 'ctlsale_rowno';
					$get_last_rec  = CattleSalesBreeds::getLastSaleSeqNoByrow($cattle_ad_id);
					break;

					case ($data['advert_type'] == 'BUYER'):
					$cattle_row_nm = 'ctlpur_rowno';
					$get_last_rec  = CattlePurchBreeds::getLastPurchSeqNoByrow($cattle_ad_id);
					break;
				}
				

				$cattle_ad_breed[$cattle_row_nm] 	= $cattle_ad_id;
				$cattle_ad_breed['seq_no'] 			= $get_last_rec + 1;
				$cattle_ad_breed['breed_type'] 		= $data['breed_details']['breed_type'];
				$cattle_ad_breed['gender'] 			= $data['breed_details']['gender'];
				$cattle_ad_breed['no_of_cattle'] 	= $data['breed_details']['no_of_catles']; 
				$cattle_ad_breed['comments'] 		= $data['breed_details']['comment'];
				$cattle_ad_breed['created_by'] 		= $logedUserRegNo;  
				$cattle_ad_breed['edited_by'] 		= $logedUserRegNo;	
								
				switch ($data) {
					case ($data['advert_type'] == 'SELLER'):
					$cattle_ad_breed['sold_status'] 		= 'A';
					$cattle_ad_breed['status_ofparenting']	= (empty($data['breed_details']['status_of_parent'])) ? '' : $data['breed_details']['status_of_parent'];
					$cattle_ad_breed['age_years'] 			= (empty($data['breed_details']['age_years'])) ? 0 : $data['breed_details']['age_years']; 
					$cattle_ad_breed['age_months'] 			= (empty($data['breed_details']['age_month'])) ? 0 : $data['breed_details']['age_month']; 
					$cattle_ad_breed['weight'] 				= (empty($data['breed_details']['weight'])) ? 0.00 : $data['breed_details']['weight']; 
					$cattle_ad_breed['price'] 				= (empty($data['breed_details']['price_per'])) ? 0.00 : str_replace(',', '', $data['breed_details']['price_per']);
					$cattle_ad_breed['available_bal'] 		= $data['breed_details']['no_of_catles'];
					$cattle_ad_breed_insert = CattleSalesBreeds::storeCattleSaleBreed($cattle_ad_breed);
					break;

					case ($data['advert_type'] == 'BUYER'):
					$cattle_ad_breed['purch_status'] 		= 'O';
					$cattle_ad_breed_insert = CattlePurchBreeds::storeCattlePurchaseBreed($cattle_ad_breed);

					break;
				}

				if(!empty($data['breed_details']['images'])){

					foreach ($data['breed_details']['images'] as $key => $image) {

						$imageName = rand(10,1000).'_'.date('YmdHis').'.'.$image->getClientOriginalExtension();

						$image_save = Storage::disk('public')->putFileAs( $logedUserRegNo.'/'.$master_advert_id , $image, $imageName);

						$imgSave['advert_id'] 	= $master_advert_id;
						$imgSave['cat_rowno'] 	= $cattle_ad_breed_insert['ctlsale_breed_rowno'];
						$imgSave['image_path'] 	= $image_save;

						Images::insert($imgSave);
						
					}
				}

				if($cattle_ad_breed_insert){
					$full_data['advert_id'] 		= $master_advert;
					$full_data['cattle_row']  		= $cattle_ad_id;
					$full_data['craetd_breed_seq']  = $cattle_ad_breed_insert['seq_no'];

					return $this->sendResponse($full_data, __('messages.adcreate_success') , true , $view= "", 200);
				}else{
					return $this->sendResponse($full_data,  __('messages.adcreate_fail') , false , $view= "", 400);
				}
			}else{
				return $this->sendResponse($full_data,  __('messages.adcreate_fail') , false , $view= "", 400);
			}
		}else{
			return $this->sendResponse($full_data,  __('messages.adcreate_fail') , false , $view= "", 400); 
		}
	}

	public function getPreBreed(Request $request){
		$full_data = array();
		$data = $request->all();

		switch ($data) {
			case ($data['advert_type'] == 'SELLER'):
			$pre_breed = CattleSalesBreeds::loadPreviousSaleBreedDetails($data);
			break;

			case ($data['advert_type'] == 'BUYER'):
			$pre_breed = CattlePurchBreeds::loadPreviousPurchBreedDetails($data);
			break;
		}

		// $pre_breed = CattleSalesBreeds::loadPreviousBreedDetails($data);
		if($pre_breed){
			return $this->sendResponse($pre_breed, __('messages.pre_ad_load_success') , true , $view= "", 200); 
		}else{
			return $this->sendResponse($full_data, __('messages.pre_ad_load_fail') , false , $view= "", 400); 
		}
	}

	public function getNextBreed(Request $request){
		$full_data = array();
		$data = $request->all();

		switch ($data) {
			case ($data['advert_type'] == 'SELLER'):
			$next_breed = CattleSalesBreeds::loadNextSaleBreedDetails($data);
			break;

			case ($data['advert_type'] == 'BUYER'):
			$next_breed = CattlePurchBreeds::loadNextPurchBreedDetails($data);
			break;
		}
		// $next_breed = CattleSalesBreeds::loadNextBreedDetails($data);
		if($next_breed){
			return $this->sendResponse($next_breed, __('messages.nxt_ad_load_success') , true , $view= "", 200); 
		}else{
			return $this->sendResponse($full_data, __('messages.nxt_ad_load_fail') , false , $view= "", 400); 
		}
	}

	public function updateCattleBreed(AdvertCattleRequest $request){

		$data = $request->all();
		$full_data = array();

		//check approval status and specific 3 only
		$approval_state = DocApprovals::getApprovalStates($data['advert_id'])->first()->toArray();

		switch ($data) {
			case ($data['advert_type'] == 'SELLER'):
			$cattle_row_nm = 'ctlsale_rowno';
			break;

			case ($data['advert_type'] == 'BUYER'):
			$cattle_row_nm = 'ctlpur_rowno';
			break;
		}

		$logedUserRegNo = Auth::user()->regno;
		$cattle_ad_breed[$cattle_row_nm] 	= $data['cattle_row'];
		$cattle_ad_breed['seq_no'] 			= $data['breed_details']['seq_no'];

		if(($approval_state['approval_status'] == 'A') && ($data['advert_type'] == 'SELLER')){


			$cattle_ad_breed['price'] 			= $data['breed_details']['price_per']; 
			$cattle_ad_breed['sold_status'] 	= $data['breed_details']['sold_status']; 
			$cattle_ad_breed['available_bal'] 	= $data['breed_details']['available_bal']; 

			$update_breed = CattleSalesBreeds::updateSaleBreedDetails($cattle_ad_breed);

		}else{

			$cattle_ad_breed['breed_type'] 		= $data['breed_details']['breed_type'];
			$cattle_ad_breed['gender'] 			= $data['breed_details']['gender'];
			$cattle_ad_breed['no_of_cattle'] 	= $data['breed_details']['no_of_catles'];
			$cattle_ad_breed['comments'] 		= $data['breed_details']['comment'];
			$cattle_ad_breed['created_by'] 		= $logedUserRegNo;  
			$cattle_ad_breed['edited_by'] 		= $logedUserRegNo;

			switch ($data) {
				case ($data['advert_type'] == 'SELLER'):
				$cattle_ad_breed['sold_status'] 		= 'A';
				$cattle_ad_breed['status_ofparenting']	= (empty($data['breed_details']['status_of_parent'])) ? '' : $data['breed_details']['status_of_parent'];
				$cattle_ad_breed['age_years'] 			= (empty($data['breed_details']['age_years'])) ? 0 : $data['breed_details']['age_years']; 
				$cattle_ad_breed['age_months'] 			= (empty($data['breed_details']['age_month'])) ? 0 : $data['breed_details']['age_month']; 
				$cattle_ad_breed['weight'] 				= (empty($data['breed_details']['weight'])) ? 0.00 : $data['breed_details']['weight']; 
				$cattle_ad_breed['price'] 				= (empty($data['breed_details']['price_per'])) ? 0.00 : $data['breed_details']['price_per']; 
				$cattle_ad_breed['available_bal'] 		= $data['breed_details']['no_of_catles'];

				$update_breed = CattleSalesBreeds::updateSaleBreedDetails($cattle_ad_breed);
				break;

				case ($data['advert_type'] == 'BUYER'):
				$cattle_ad_breed['purch_status'] 		= 'O';
				$update_breed = CattlePurchBreeds::updatePurchBreedDetails($cattle_ad_breed);
				break;
			}

		}
		if($update_breed){
			return $this->sendResponse($update_breed, __('messages.updt_success') , true , $view= "", 200); 
		}else{
			return $this->sendResponse($full_data, __('messages.updt_fail') , false , $view= "", 400); 
		}

	}

	public function deleteCattleBreed(Request $request){
		$data = $request->all();
		$full_data = array();

		switch ($data) {
			case ($data['advert_type'] == 'SELLER'):
			$delete_breed = CattleSalesBreeds::deleteSaleBreedDetails($data);
			break;

			case ($data['advert_type'] == 'BUYER'):
			$delete_breed = CattlePurchBreeds::deletePurchBreedDetails($data);
			break;
		}
		// $delete_breed = CattleSalesBreeds::deleteBreedDetails($data);
		if($delete_breed){
			return $this->sendResponse($delete_breed, __('messages.dlte_success') , true , $view= "", 200); 
		}else{
			return $this->sendResponse($full_data, __('messages.dlte_fail') , false , $view= "", 400); 
		}
	}

	public function dropDownDataForCreateAd(){

		$data = array();

		$duration 	= Fixval::getSpecificValue('ADVERT_DURATION');
		$gender 	= Fixval::getSpecificValue('GENDER');
		$paren_stat = Fixval::getSpecificValue('PARENTING_STATUS');
		$breed_types= CattleBreed::getAllBreedTypes();

		foreach ($duration as $key => $due) {
			$data['ad_duration'][$key]['id']	= $due['val_id'];
			$data['ad_duration'][$key]['value']	= $due['val_des'];
		}
		foreach ($gender as $key => $gen) {
			$data['gender'][$key]['id']		= $gen['val_id'];
			$data['gender'][$key]['value']	= $gen['val_des'];
		}
		foreach ($paren_stat as $key => $parenting) {
			$data['parenting_state'][$key]['id']	= $parenting['val_id'];
			$data['parenting_state'][$key]['value']	= $parenting['val_des'];
		}
		foreach ($breed_types as $key => $breed) {
			$data['breed_type'][$key]['id']		= $breed['breed_type'];
			$data['breed_type'][$key]['value']	= $breed['breed_name'];
		}
		if($data){
			return $this->sendResponse($data, __('messages.data_found') , true , $view= "", 200);
		}else{
			return $this->sendResponse($data, __('messages.data_not_found') , false , $view= "", 400);
		}

	}

}
