<?php

use Illuminate\Database\Seeder;

use App\Role;
use App\Module;
use App\Category;
use App\User;
use App\Notification;
use App\FieldType;
use App\OperationType;
use App\Tariff;
use App\Page;

// Основные категории на сайте
class CategoryTableSeeder extends Seeder {

  public function run()
  {
    DB::table('categories')->truncate();

    $category_list =
      [
        'Авто, мото, техника' =>
          [
            'GT и тюнинг',
            'Авто литература CD DVD',
            'Автомобили на запчасти',
            'Авто принадлежности и атрибутика',
            'Автохимия ГСМ и расходники',
            'Аккумуляторы',
            'Аудио видео и авто навигация',
            'Багажники, фаркопы, кенгурины',
            'Гаражи',
            'Детские автокресла',
            'Инструмент и оборудование',
            'Куплю',
            'Мото',
            'Продажа ПТС',
            'Продажа запчастей',
            'Продажа легковых автомобилей',
            'Ретро',
            'Сигнализации и охранные устройства',
            'Спецтехника',
            'Услуги',
            'Шины и диски',
            'Другое'
          ],
        'Недвижимость' =>
          [
            'Гаражи',
            'Дачи продажа',
            'Дома, дачи обмен',
            'Дома, коттеджи аренда',
            'Дома, коттеджи продажа',
            'Земельные участки аренда',
            'Земельные участки продажа',
            'Квартиры аренда',
            'Квартиры аренда посуточно',
            'Квартиры продажа',
            'Квартиры обмен',
            'Квартиры продажа',
            'Квартиры сниму',
            'Куплю',
            'Недвижимость за границей',
            'Аренда помещения',
            'Продажа помещений',
            'Проекты домов',
            'Совместное проживание',
          ],
        'Работа и вакансии' =>
          [
            'Разовая работа',
            'Вакансии',
            'Доп. Заработок и сетевой маркетинг',
            'Заработок в сети интернет',
            'Партнерство',
            'Работа и обучение за границей',
            'Резюме',
            'Видео резюме',
          ],
        'Сфера услуг' =>
          [
            'Авто и мото',
            'Активный отдых, спорт и танцы',
            'Бухгалтерия и финансы',
            'Водная техника',
            'Грузоперевозки',
            'Детям и родителям',
            'Для дома',
            'Животные',
            'Изготовление и продажа рекламы',
            'Интернет',
            'Косметические и парикмахерские услуги',
            'Мебель',
            'Медицинская помощь',
            'Музыкальные услуги',
            'Недвижимость',
            'Обучение',
            'Одежда и обувь',
            'Организация праздников',
            'Подарки и сувениры',
            'Ремонт техники и компьютерные услуги',
            'Фото и видео услуги',
            'Юридические',
            'Другие',
          ],
        'Бизнес' =>
          [
            'Изготовление и продажа рекламы',
            'Канцелярия',
            'Куплю бизнес',
            'Лес',
            'Оборудование для бизнеса',
            'Продажа готового бизнеса',
            'Рыба',
            'Спец конструкции, контейнеры, киоски',
            'Судовое снабжение',
            'Сырье, товар, товары оптом',
            'Партнерство и сотрудничество',
            'Бизнес услуги',
            'Другое'
          ],
        'Все для дома' =>
          [
            'Двери, окна, перегородки',
            'Детская мебель',
            'Домашняя утварь и предметы быта',
            'Заказ, изготовление и сборка мебели',
            'Мебель',
            'Дизайн',
            'Сад и огород',
            'Сантехника',
            'Свет и электрика',
            'Бытовая техника',
            'Другое'
          ],
        'Строительство и ремонт' =>
          [
            'Инструменты и строительное оборудование',
            'Отделочные материалы',
            'Электрика',
            'Готовые конструкции дома, бани, срубы',
            'Средства индивидуальной защиты',
            'Другое',
            'Двери, окна, балконы, лестницы',
            'Сантехника',
            'Отопление',
            'Насосы',
            'Вентиляционные системы',
            'Услуги',
          ],
        'Распродажи и скидки' =>
          [
            'Купоны',
            'Распродажи, акции',
          ],
        'Спорт, туризм, охота' =>
          [
            'Охотничье снаряжение',
            'Рыболовные принадлежности',
            'Спортивные товары',
            'Товары для туризма и активного отдыха',
            'Спортивные игры, виды спорта',
            'Экскурсии, туры, круизы',
            'Фитнес, атлетика, борьба',
            'Обучения и занятия',
            'Другое',
          ],
        'Праздники, подарки и сувениры' =>
          [
            'Тематические подарки',
            'Букеты, декоративные цветы и вкусные подарки',
            'Принадлежности для спиртного, курения и аксессуары',
            'Подарки ручной работы',
            'Сувениры',
            'Подарки для декора и интерьера',
            'Хобби и развлечения',
            'Подарочные наборы',
            'Подарочные сертификаты',
            'Праздничные аксессуары',
            'Праздничное оформление',
            'Услуги',
            'Ювелирные украшения',
          ],
        'Свадьба' =>
          [
            'Аренда свадебных авто',
            'Ведущие, ди – джеи и артисты',
            'Кафе и рестораны',
            'Платья, костюмы и аксессуары',
            'Прически, маникюр, макияж',
            'Фото и видео съемка',
            'Цветы, украшения, оформление',
            'Все для свадьбы',
            'Другое',
          ],
        'Путешествия и отдых' =>
          [
            'Европа',
            'Бронирование билетов',
            'Азия',
            'Поиск попутчиков',
            'Приморье',
            'Россия',
            'Базы отдыха',
            'Кинотеатры, театры, опера',
            'Бары, рестораны, кафе',
            'Детский отдых',
            'Боулинг, бильярд',
            'Другое',
          ],
        'Служба доставки' =>
          [

          ],
        'Материнство и детство' =>
          [
            'Детская одежда и обувь',
            'Одежда для будущих мам',
            'Детская мебель',
            'Купание и гигиена',
            'Куплю',
            'Игрушки',
            'Спортивные товары',
            'Детское питание, кормление',
            'Товары для школы',
            'Коляски',
            'Автокресла',
            'Товары для малышей',
            'Подгузники и трусики',
            'Постельные принадлежности',
            'Для будущих мам',
            'Другие детские товары',
            'Детские сады, комнаты отдыха',
            'Услуги',
            'Другое'
          ],
        'Одежда, обувь, аксессуары' =>
          [
            'Женская одежда и обувь',
            'Аксессуары и бижутерия',
            'Декоративная и лечебная косметика',
            'Детская одежда и обувь',
            'Мужская одежда и обувь',
            'Парфюмерия',
            'Все для свадьбы',
            'Услуги',
            'Ювелирные изделия',
          ],
        'Техника' =>
          [
            'Автомобильное аудио и видео',
            'Аудио, видео телевизоры',
            'Бытовая техника',
            'Компьютерная техника',
            'Куплю',
            'Фото и оптика',
            'Прочая электроника',
            'Телефоны и связь',
            'Услуги',
            'Фото и видеокамеры'
          ]
      ];

    $i = 0;
    foreach($category_list as $name=>$subcategories)
    {
      $sort_start = $i*100;

      $MainCategory = Category::create(['parent_id' => 0, 'sort' => $sort_start, 'name' => $name, 'pic' => 'cat_'.($i+1).'.png']);

      if(count($subcategories) > 0)
      {
        foreach($subcategories as $category)
        {
          Category::create(['parent_id' => $MainCategory->id, 'sort' => ++$sort_start, 'name' => $category, 'pic' => '']);
        }
      }

      $i++;
    }
  }
}

// Отмечаем флагманские категории
class FlagshipCategoryTableSeeder extends Seeder {

  public function run()
  {
    // Список категорий, которые должны быть флагманскими
    $flaghipCategories =
      [
        'Авто, мото, техника',
        'Недвижимость',
        'Работа и вакансии',
        'Сфера услуг',
        'Бизнес',
        'Все для дома',
        'Строительство и ремонт'
      ];

    $RootCategories = Category::where('parent_id','=',0)->get();

    foreach($RootCategories as $Category)
    {
      if(in_array($Category->name, $flaghipCategories))
        $Category->makeFlagship();
    }

  }

}

// Список модулей сайта
class ModulesTableSeeder extends Seeder
{
  public function run()
  {
    DB::table('modules')->delete();

    Module::create(['name'=>'Панель управления', 'module'=>'index']);
    Module::create(['name'=>'Объявления', 'module'=>'advert']);
    Module::create(['name'=>'Типы деятельности', 'module'=>'business']);
    Module::create(['name'=>'Категории для объявлений', 'module'=>'category']);
    Module::create(['name'=>'Города и регионы', 'module'=>'city']);
    Module::create(['name'=>'Компании', 'module'=>'company']);
    Module::create(['name'=>'Дополнительные поля', 'module'=>'field']);
    Module::create(['name'=>'Статичные страницы', 'module'=>'page']);
    Module::create(['name'=>'Отзывы', 'module'=>'review']);
    Module::create(['name'=>'Роли', 'module'=>'role']);
    Module::create(['name'=>'Пользователи', 'module'=>'user']);
    Module::create(['name'=>'Настройки', 'module'=>'setting']);
  }
}

// Создание основных ролей и уровней доступа
class RolesTableSeeder extends Seeder
{
  public function run()
  {
    // Очищаем все роли
    DB::table('roles')->truncate();
    DB::table('module_role')->truncate();
    DB::table('role_user')->truncate();

    // Список всех модулей на сайте
    $ModuleList = Module::all();

    // создание ролей админа с правами на всё и пользователями, которые никаких доступов в админку не имеют
    $AdminRole = Role::create(['name' => 'Администратор']);
    $ModeratorRole = Role::create(['name' => 'Модератор']);
    $UserRole  = Role::create(['name' => 'Пользователь сайта']);

    // назначаем права доступа к модулю на роль
    foreach($ModuleList as $Module)
    {
      $AdminRole->modules()->save($Module, ['access_read' => true, 'access_edit' => true, 'access_delete' => true]);
      $ModeratorRole->modules()->save($Module, ['access_read' => true, 'access_edit' => true]);
      $UserRole->modules()->save($Module);
    }

    $Admin = User::find(1);
    $Moderator = User::find(2);
    $Client = User::find(3);

    $Admin->roles()->save($AdminRole);
    $Moderator->roles()->save($ModeratorRole);
    $Client->roles()->save($UserRole);
  }
}

// Создание основных типов уведомлений
class NotificationTypesTableSeeder extends Seeder {

  public function run()
  {
    DB::table('notification_types')->truncate();
    DB::table('notification_type_user')->truncate();

    DB::table('notification_types')->insert([
      ['id' => Notification::getPrivateMessageTypeId(), 'title' => 'Личные сообщения'],
      ['id' => Notification::getAdvertMessageTypeId(), 'title' => 'Вопросы к объявлению'],
      ['id' => Notification::getNewAdvertTypeId(), 'title' => 'Новые объявления'],
      ['id' => Notification::getUpdateRateTypeId(), 'title' => 'Оценки и отзывы о вас'],
      ['id' => Notification::getEndPaymentTypeId(), 'title' => 'Истекающие платные услуги'],
      ['id' => Notification::getNewsMessageTypeId(), 'title' => 'Акции и новости сайта'],
      ['id' => Notification::getSupportMessageTypeId(), 'title' => 'Сообщения от Службы поддержки'],
      ['id' => Notification::getTechInfoTypeId(), 'title' => 'Техническая информация']
    ]);
  }

}

class FieldTypesTableSeeder extends Seeder {

  public function run()
  {
    DB::table('field_types')->truncate();

    DB::table('field_types')->insert([
      ['id' => FieldType::getTextType(),     'title' => 'Текстовое поле'],
      ['id' => FieldType::getTextareaType(), 'title' => 'Многострочное поле'],
      ['id' => FieldType::getNumberType(),   'title' => 'Числовое поле'],
      ['id' => FieldType::getCheckboxType(), 'title' => 'Поле с вариантами (несколько значений)'],
      ['id' => FieldType::getRadioType(),    'title' => 'Поле с вариантами (одно значение)'],
      ['id' => FieldType::getSelectType(),   'title' => 'Выпадающий список']
    ]);
  }

}

class HighlightColorTableSeeder extends Seeder {

  public function run()
  {
    DB::table('highlight_colors')->truncate();

    DB::table('highlight_colors')->insert([
      ['name' => 'blue'],
      ['name' => 'orange']
    ]);
  }

}

class OperationTypeTableSeeder extends Seeder {

  public function run()
  {
    DB::table('operation_types')->truncate();
    DB::table('tariffs')->truncate();

    DB::table('operation_types')->insert([
      ['code' => 'pickup', 'name' => 'Поднятие объявления'],
      ['code' => 'highlight', 'name' => 'Выделение объявления'],
      ['code' => 'enforce', 'name' => 'Закрепление объявления']
    ]);

    $OperationTypeList = OperationType::all();

    foreach($OperationTypeList as $Type)
    {
      $Tariff = Tariff::create([]);
      $Type->tariff()->save($Tariff);
    }
    $Tariff = null;
  }

}

class PageTableSeeder extends Seeder {

  public function run()
  {
    DB::table('pages')->truncate();

    Page::create([
      'title'   => 'Как разместить в этом блоке, ваше объявление?',
      'slug'    => 'kak-razmestit-v-etom-bloke-vashe',
      'content' => ''
    ]);

    Page::create([
      'title'   => 'Заказать рекламу',
      'slug'    => 'zakazat-reklamu',
      'content' => ''
    ]);

    //
  }

}