<?php

namespace App\Models;

use App\Utils;
use App\Models\City;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;

class Park extends Model
{
    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    protected $table = 'park';
    protected $primaryKey = 'park_id';

    protected $fillable = [
        'park_id',                         // 駐輪場ID
        'city_id',                         // 市区
        'park_name',                       // 駐輪場名
        'park_ruby',                       // 駐輪場ふりがな
        'park_syllabary',                  // 駐輪場五十音
        'park_adrs',                       // 住所
        'park_close_flag',                 // 閉設フラグ
        'park_day',                        // 閉設日
        'price_memo',                      // 価格メモ
        'alert_flag',                      // 残警告チェックフラグ
        'print_number',                    // 印字数
        'keep_alive',                      // 最新キープアライブ

        'update_grace_period_start_date',  // 更新期間開始日
        'update_grace_period_start_time',  // 更新期間開始時
        'update_grace_period_end_date',    // 更新期間終了日
        'update_grace_period_end_time',    // 更新期間終了時        
        'parking_start_grace_period',            // 駐輪開始猶予期間

        'reminder_type',                    // リマインダー種別
        'reminder_time',                    // リマインダー時間
        'immediate_use_permit',             // 契約後即利用許可
        'gender_display_flag',              // 項目表示設定：性別
        'bd_display_flag',                  // 項目表示設定：生年月日
        'securityreg_display_flag',         // 項目表示設定：防犯登録番号
        'distance_twopoints',               // 二点間距離

        'park_latitude',                        // 駐車場座標（緯度）
        'park_longitude',                       // 駐車場座標（経度）
        'park_tel',                             // 電話番号
        'park_fixed_contract',                  // 駐輪場契約形態（定期）
        'park_temporary_contract',              // 駐輪場契約形態（一時利用）
        'park_restriction',                     // 車種制限
        'park_procedure',                       // 手続方法
        'park_payment',                         // 支払方法

        'park_available_time_flag',             // 利用可能時間制限フラグ
        'park_available_time_from',             // 利用可能時間（開始）
        'park_available_time_to',               // 利用可能時間（終了）
        'park_manager_flag',                    // 常駐管理人フラグ
        'park_manager_resident_from',              // 常駐時間（開始）
        'park_manager_resident_to',                // 常駐時間（終了）
        'park_roof_flag',                       // 屋根フラグ

        'park_issuing_machine_flag',            // シール発行機フラグ
        'park_using_method',                    // 駐輪場利用方法
        'park_contract_renewal_term',           // 定期更新期間

        'park_reservation',                     // 空き待ち予約
        'park_reference',                       // 特記事項
        'student_id_confirmation_type',         // 学生証確認種別

        'reduction_guide_display_flag',           // 減免案内表示フラグ
        'reduction_age',                  // 減免対象年齢

        'reduction_guide_display_start_month',  // 減免案内表示開始月数
        'overyear_flag',                        // 年跨ぎ
        'inverse_use_flag1',                    // 逆利用一般
        'inverse_use_flag2',                    // 逆利用学生
        'parking_regulations_flag'              // 駐輪規定フラグ

    ];

    public static function search($inputs)
    {
        $list = self::query();
        if ($inputs['isMethodPost']) {
        }
        // Sort
        if ($inputs['sort']) {
            $list->orderBy($inputs['sort'], $inputs['sort_type']);
        }
        if ($inputs['isExport']){
            $list = $list->get();
        }else{
            $list = $list->paginate(Utils::item_per_page);
        }
        return $list;
    }

    public static function getByPk($pk)
    {
        return self::find($pk);
    }
    
    public static function deleteByPk($arr)
    {
        return self::whereIn('park_id', $arr)->delete();
    }

    public static function boot()
    {
        parent::boot();
        self::creating(function (Park $model) {
            $model->operator_id = Auth::user()->ope_id ?? null;
        });
    }
   
    /**
     * GET 閉設フラグ
     */
    public function getParkCloseFlagDisplay() {
        if($this->park_close_flag == 1) {
            return '閉設';
        }
        else if($this->park_close_flag == 0) {
            return '開設';
        } 
        return '';
    }

    public function getCity()
    {
        // city_id => city_id (City モデル要有 city_id PK)
        return $this->belongsTo(City::class, 'city_id', 'city_id')->first();
    }

    public static function getList(){
        return self::pluck('park_name','park_id');
    }

    public static function getIdByName($park_name){
        return self::where('park_name',$park_name)->pluck('park_id')->first();
    }
    
    /**
     * 料金設定との関連付け
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function prices()
    {
        return $this->hasMany(PriceA::class, 'park_id', 'park_id');
    }
    
}
