-- ========================================================================
-- ساختار پایگاه داده رسمی باشگاه فرهنگی ورزشی آزادی گیاهدان (تأسیس ۱۳۵۱)
-- دامنه: https://azadifc.giahdanportal.ir
-- کدگذاری: utf8mb4_persian_ci
-- ========================================================================

CREATE DATABASE IF NOT EXISTS `giahdan_azadifc_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;
USE `giahdan_azadifc_db`;

-- 1. جدول کاربران و سطوح دسترسی
CREATE TABLE IF NOT EXISTS `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(50) NOT NULL UNIQUE,
  `password_hash` VARCHAR(255) NOT NULL,
  `full_name` VARCHAR(100) NOT NULL,
  `role` ENUM('SUPER_ADMIN', 'CLUB_MANAGER', 'COACH', 'MEDIA', 'SUPERVISOR', 'PLAYER', 'FAN') NOT NULL DEFAULT 'FAN',
  `phone_number` VARCHAR(20) DEFAULT '',
  `associated_player_id` INT NULL,
  `active` TINYINT(1) DEFAULT 1,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 2. جدول بازیکنان تیم
CREATE TABLE IF NOT EXISTS `players` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `first_name` VARCHAR(50) NOT NULL,
  `last_name` VARCHAR(50) NOT NULL,
  `father_name` VARCHAR(50) DEFAULT '',
  `national_code` VARCHAR(10) NOT NULL UNIQUE,
  `birth_date` VARCHAR(20) DEFAULT '',
  `birth_place` VARCHAR(50) DEFAULT 'قشم',
  `phone_number` VARCHAR(20) DEFAULT '',
  `emergency_phone` VARCHAR(20) DEFAULT '',
  `address` TEXT,
  `jersey_number` INT NOT NULL,
  `position` VARCHAR(20) NOT NULL,
  `preferred_foot` VARCHAR(10) DEFAULT 'راست',
  `height_cm` INT DEFAULT 180,
  `weight_kg` INT DEFAULT 75,
  `status` VARCHAR(30) DEFAULT 'فعال',
  `verification_status` VARCHAR(30) DEFAULT 'تأیید شده',
  `national_id_card_verified` TINYINT(1) DEFAULT 1,
  `birth_cert_verified` TINYINT(1) DEFAULT 1,
  `medical_cert_verified` TINYINT(1) DEFAULT 1,
  `photo_verified` TINYINT(1) DEFAULT 1,
  `matches_played` INT DEFAULT 0,
  `starting_xi_appearances` INT DEFAULT 0,
  `minutes_played` INT DEFAULT 0,
  `goals` INT DEFAULT 0,
  `assists` INT DEFAULT 0,
  `yellow_cards` INT DEFAULT 0,
  `red_cards` INT DEFAULT 0,
  `clean_sheets` INT DEFAULT 0,
  `fitness_score` INT DEFAULT 90,
  `joined_date` VARCHAR(20) DEFAULT '1401/05/01'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 3. جدول قراردادها و تعهدات مالی
CREATE TABLE IF NOT EXISTS `contracts` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `player_id` INT NOT NULL,
  `player_name` VARCHAR(100) NOT NULL,
  `start_date` VARCHAR(20) NOT NULL,
  `end_date` VARCHAR(20) NOT NULL,
  `total_amount` BIGINT NOT NULL,
  `paid_amount` BIGINT DEFAULT 0,
  `payment_terms` TEXT,
  `bonuses` TEXT,
  `season` VARCHAR(30) DEFAULT '۱۴۰۴-۱۴۰۵',
  `status` VARCHAR(50) DEFAULT 'فعال',
  `approved_by_admin` TINYINT(1) DEFAULT 1,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 4. جدول مسابقات و نتایج
CREATE TABLE IF NOT EXISTS `matches` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `title` VARCHAR(100) NOT NULL,
  `match_type` VARCHAR(50) DEFAULT 'لیگ',
  `opponent` VARCHAR(100) NOT NULL,
  `match_date` VARCHAR(20) NOT NULL,
  `match_time` VARCHAR(10) NOT NULL,
  `venue` VARCHAR(150) NOT NULL,
  `is_home` TINYINT(1) DEFAULT 1,
  `goals_for` INT DEFAULT 0,
  `goals_against` INT DEFAULT 0,
  `status` VARCHAR(30) DEFAULT 'پایان یافته',
  `referee` VARCHAR(100) DEFAULT 'داور رسمی',
  `head_coach` VARCHAR(100) DEFAULT 'استاد فرهاد صالحی',
  `formation` VARCHAR(20) DEFAULT '4-3-3',
  `starting_xi_ids` TEXT,
  `substitutes_ids` TEXT,
  `captain_player_id` INT DEFAULT 10,
  `notes` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 5. جدول جلسات تمرینی
CREATE TABLE IF NOT EXISTS `training_sessions` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `title` VARCHAR(100) NOT NULL,
  `date` VARCHAR(20) NOT NULL,
  `time` VARCHAR(10) NOT NULL,
  `location` VARCHAR(150) NOT NULL,
  `focus_type` VARCHAR(50) NOT NULL,
  `coach_name` VARCHAR(100) NOT NULL,
  `notes` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 6. جدول حضور و غیاب تمرین
CREATE TABLE IF NOT EXISTS `training_attendance` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `session_id` INT NOT NULL,
  `player_id` INT NOT NULL,
  `status` VARCHAR(30) DEFAULT 'حاضر',
  `delay_minutes` INT DEFAULT 0,
  `performance_rating` FLOAT DEFAULT 8.0,
  `note` TEXT,
  FOREIGN KEY (`session_id`) REFERENCES `training_sessions`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 7. جدول ارزیابی‌های فنی مربی
CREATE TABLE IF NOT EXISTS `player_ratings` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `player_id` INT NOT NULL,
  `match_or_training_title` VARCHAR(100) NOT NULL,
  `date` VARCHAR(20) NOT NULL,
  `technical_score` FLOAT DEFAULT 8.0,
  `passing_score` FLOAT DEFAULT 8.0,
  `shooting_score` FLOAT DEFAULT 8.0,
  `defense_score` FLOAT DEFAULT 8.0,
  `physicality_score` FLOAT DEFAULT 8.0,
  `pace_score` FLOAT DEFAULT 8.0,
  `intelligence_score` FLOAT DEFAULT 8.0,
  `teamwork_score` FLOAT DEFAULT 8.0,
  `overall_average` FLOAT DEFAULT 8.0,
  `feedback` TEXT,
  `rated_by_coach_name` VARCHAR(100) NOT NULL,
  FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 8. جدول کادر فنی و اجرایی
CREATE TABLE IF NOT EXISTS `staff` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `full_name` VARCHAR(100) NOT NULL,
  `role` VARCHAR(50) NOT NULL,
  `phone_number` VARCHAR(20) DEFAULT '',
  `qualifications` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 9. جدول اطلاعیه‌ها و اخبار
CREATE TABLE IF NOT EXISTS `announcements` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `title` VARCHAR(150) NOT NULL,
  `content` TEXT NOT NULL,
  `date` VARCHAR(20) NOT NULL,
  `priority` VARCHAR(20) DEFAULT 'مهم',
  `target_role` VARCHAR(30) DEFAULT 'ALL',
  `author_name` VARCHAR(100) DEFAULT 'روابط عمومی باشگاه آزادی گیاهدان'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 10. جدول رده‌بندی مسابقات لیگ
CREATE TABLE IF NOT EXISTS `standings` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `team_name` VARCHAR(100) NOT NULL,
  `rank` INT NOT NULL,
  `played` INT DEFAULT 0,
  `won` INT DEFAULT 0,
  `drawn` INT DEFAULT 0,
  `lost` INT DEFAULT 0,
  `goals_for` INT DEFAULT 0,
  `goals_against` INT DEFAULT 0,
  `goal_difference` INT DEFAULT 0,
  `points` INT DEFAULT 0,
  `is_our_team` TINYINT(1) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 11. جدول تراکنش‌های مالی و حسابداری
CREATE TABLE IF NOT EXISTS `finance_transactions` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `title` VARCHAR(150) NOT NULL,
  `type` ENUM('INCOME', 'EXPENSE') NOT NULL,
  `category` VARCHAR(50) NOT NULL,
  `amount` BIGINT NOT NULL,
  `date` VARCHAR(20) NOT NULL,
  `description` TEXT,
  `tracking_number` VARCHAR(50) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 12. جدول پیام‌های چت و گفتگوی داخلی کادر و مربیان
CREATE TABLE IF NOT EXISTS `chat_messages` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `sender_id` INT NOT NULL,
  `sender_name` VARCHAR(100) NOT NULL,
  `sender_role` VARCHAR(30) NOT NULL,
  `receiver_id` INT NULL,
  `receiver_name` VARCHAR(100) NULL,
  `message` TEXT NOT NULL,
  `timestamp` VARCHAR(30) NOT NULL,
  `is_from_coach` TINYINT(1) DEFAULT 0,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- داده‌های اولیه کاربران پیش‌فرض
INSERT INTO `users` (`id`, `username`, `password_hash`, `full_name`, `role`, `phone_number`) VALUES
(1, 'admin', '123456', 'مهندس محمد گیاهدانی', 'SUPER_ADMIN', '09173634120'),
(2, 'manager', '123456', 'حاج احمد رحیمی گیاهدانی', 'CLUB_MANAGER', '09171638890'),
(3, 'coach', '123456', 'استاد فرهاد صالحی', 'COACH', '09173614522'),
(4, 'supervisor', '123456', 'جاسم دریانورد گیاهدانی', 'SUPERVISOR', '09177672230'),
(5, 'player', '123456', 'علی رضایی گیاهدانی (کاپیتان)', 'PLAYER', '09179612344'),
(6, 'media', '123456', 'مهدی گیاهدانی (مدیر رسانه و روابط عمومی)', 'MEDIA', '09174558810')
ON DUPLICATE KEY UPDATE `username`=`username`;
