<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Scopes\MessageScope;


class Merchant extends Model
{
	use SoftDeletes;
    use Encryptable;

    protected $table = 'merchant';

    public static $encryptable = [
        'gst_number',
        'rcp_mobile',
        'sales_head_mobile',
        'finance_head_mobile',
        'pan_card',
        'email'
    ];
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(new MessageScope(static::$encryptable));
    }
    protected $fillable = ['merchant_name','slug','contact_number','status', 'max_no_cases', 'max_approval_value','email','address','category_id','merchant_logo','type_of_firm','nature_of_business','owner_name','title','grade_id','gst_number','is_collected','code','rcp','sales_head','finance_head','avg_ticket_size','rcp_email','rcp_mobile','sales_head_email','sales_head_mobile','finance_head_email','finance_head_mobile','is_guest_active','is_gst','state','anchor_merchant_id','source', 'gender', 'dob', 'pincode', 'pan_card','city','is_auto_abort','is_processing_fees','co_applicant','gst_is_defaulter','gst_is_any_delay','months_gst_filled','is_physical_verification','rm_id','is_auto_abort_approved','is_auto_approve','is_auto_doc','high_risk','vulnerable_merchant','vulnerable_merchant_date','pre_approval','pending_adjustable_amount','pending_collection_report','special_notes','latitude','longitude','year_in_business','location_audit', 'liability_percent','insurance_premium','location_serviceable','user_banking_reason','charge_subvention_remaining_amount','welcome_letter_sent','send_da_on_checklist','target_number_application','target_value_application','custom_grade_id','remove_esign_otp','status_changed_by','pay_data_sharing','official_merchant_name','collect_advance_amount', 'is_fldg_active','is_trade_advance','agreement_signed_with','agreement_signed_by','merchant_reg_type','designation_of_sign_auth','ips', 'financial_partner','mis_frequency','processing_fee_on_advance_amount','subv_inv_on_center','total_revenue_per_month','percentage_of_sales_in_emi','number_of_lenders','number_of_visits','landmark', 'table_of_offers', 'is_hypothecation_active', 'receive_application'];

    public function merchant_category()
    {
        return $this->hasOne('App\MerchantCategory','id','category_id');
    }

    public function gst_authentication(){
        return $this->hasOne('App\KarzaAPI','merchant_id','id');
    }

    public function merchant_category_many()
    {
        return $this->hasMany('App\MerchantCategory','id','category_id');
    }

    public function bank_details()
    {
        return $this->hasOne('App\MerchantBank','merchant_id','id');
    }
    public function offer()
    {
        return $this->hasMany('App\MerchantOffers','merchant_id','id');
    }
    public function module()
    {
        return $this->hasMany('App\MerchantModule','merchant_id','id')->where('status','>',0);
    }
    public function moduleAll()
    {
        return $this->hasMany('App\MerchantModule','merchant_id','id');
    }

    public function gst_filling_data()
    {
        return $this->hasMany('App\MerchantGstFillingData','merchant_id','id')->where('type','merchant_id');
    }
    public function centers()
    {
        return $this->hasMany('App\MerchantLocation','merchant_id','id');
    }
    public function digital_sign()
    {
        return $this->hasOne('App\DigitalSignDetails','application_id','id')
            ->where('type','merchant');
    }
    public function grade()
    {
        return $this->hasOne('App\Grades','id','grade_id');
    }
    public function grade_v1()
    {
        return $this->hasOne('App\GradesV1','id','grade_id');
    }

    public function custom_grade(){
        return $this->hasOne('App\CustomGradesMain','id','custom_grade_id');
    }

    public function document_rule()
    {
        return $this->hasMany('App\DocumentRule','grade_id','grade_id');
    }
    public function preApproval()
    {
        return $this->hasMany('App\PreApproval','grade_id','grade_id');
    }
    public function autoRejectConsumer()
    {
        return $this->hasOne('App\AutoReject','grade_id','grade_id')->where('for_consumer', 1);
    }
    public function autoReject()
    {
        return $this->hasOne('App\AutoReject','grade_id','grade_id')->where('for_consumer', 0);
    }
    public function autoRejectRule()
    {
        return $this->hasMany('App\AutoRejectRule','grade_id','grade_id');
    }
    public function applications(){
        return $this->hasMany('App\ConsumerApplication','merchant_id','id');
    }
    public function users(){
        return $this->hasMany('App\User','merchant_id','id');
    }

    public function rm_exotel(){
        return $this->hasMany('App\User','id','rm_id')->where('user_availability',1)->whereNull('deleted_at');
    }
    public function rmDetails(){
        return $this->hasOne('App\User','id','rm_id')->whereNull('deleted_at');
    }
    public function active_offers(){
        return $this->hasMany('App\MerchantOffers','merchant_id','id')->where('status',"=",1);
    }
    public function calls(){
        return $this->hasMany('App\CallLogs','_id','id')->where('id_type','merchant_id')->where(function ($query) {
            $query->whereNull('status')
                ->orWhereIn('status', ['in-progress','ringing']);
        });
    }

    public function anchorMerchant(){
        return $this->hasOne('App\Merchant','id','anchor_merchant_id')->select('id','merchant_name');
    }

    public function adjustable_transaction(){
        return $this->hasMany('App\PaymentTransaction','collected_by','id')->where('collected_by_type',2)->where('adjust_with_disbursement',1)->where('adjusted_to', 0)->where('status','success')->select('id','collected_by','application_id','amount');
    }

    public function products()
    {
        return $this->hasMany('App\Products','merchant_id','id');
    }

    public function merchant_logs(){
        return $this->hasMany('App\MerchantLogs', 'merchant_id', 'id');
    }

    public function webhook(){
        return $this->hasMany('App\Webhook', 'merchant_id', 'id');
    }

    public function credential(){
        return $this->hasOne('App\MerchantApiCredentials', 'merchant_id', 'id')->where('status', 1);
    }

    public function merchant_files()
    {
        return $this->hasOne('App\MerchantFiles', 'merchant_id', 'id')->whereNull('type')->where('file_type','signed_agreement');
    }

    public function fldg_categories(){
        return $this->hasMany('App\FLDGCategory', 'merchant_id', 'id')->whereNull('deleted_at');
    }
}
