<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
  <edmx:DataServices>
    <Schema Namespace="OrangeCat.LMS" xmlns="http://docs.oasis-open.org/odata/ns/edm">
      
      <!-- Employee Entity Type with all 42 Standard Enterprise Fields -->
      <EntityType Name="Employee">
        <Key>
          <PropertyRef Name="employeeId" />
        </Key>
        
        <!-- 1-4. Identity & Mandatory -->
        <Property Name="employeeId" Type="Edm.String" Nullable="false" />
        <Property Name="firstName" Type="Edm.String" Nullable="false" />
        <Property Name="middleName" Type="Edm.String" />
        <Property Name="lastName" Type="Edm.String" Nullable="false" />
        <Property Name="name" Type="Edm.String" />
        <Property Name="id" Type="Edm.String" />
        
        <!-- 5. Profile Photo -->
        <Property Name="profilePhoto" Type="Edm.String" />
        <Property Name="avatar" Type="Edm.String" />
        
        <!-- 6-10. Personal & Contact -->
        <Property Name="dateOfBirth" Type="Edm.Date" />
        <Property Name="gender" Type="Edm.String" />
        <Property Name="personalEmail" Type="Edm.String" />
        <Property Name="phone" Type="Edm.String" />
        <Property Name="alternatePhone" Type="Edm.String" />
        
        <!-- 11-15. Residential Address -->
        <Property Name="presentAddress" Type="Edm.String" />
        <Property Name="permanentAddress" Type="Edm.String" />
        <Property Name="city" Type="Edm.String" />
        <Property Name="state" Type="Edm.String" />
        <Property Name="pinCode" Type="Edm.String" />
        
        <!-- 16-20. Demographics & Relations -->
        <Property Name="nationality" Type="Edm.String" />
        <Property Name="emergencyContactName" Type="Edm.String" />
        <Property Name="emergencyContactNumber" Type="Edm.String" />
        <Property Name="highestQualification" Type="Edm.String" />
        <Property Name="maritalStatus" Type="Edm.String" />
        
        <!-- 21-25. Job Role & Organization -->
        <Property Name="employeeCode" Type="Edm.String" />
        <Property Name="companyName" Type="Edm.String" />
        <Property Name="department" Type="Edm.String" />
        <Property Name="designation" Type="Edm.String" />
        <Property Name="jobRole" Type="Edm.String" />
        <Property Name="role" Type="Edm.String" />
        
        <!-- 26-29. Employment & Hierarchy -->
        <Property Name="employmentType" Type="Edm.String" />
        <Property Name="dateOfJoining" Type="Edm.Date" />
        <Property Name="employmentStatus" Type="Edm.String" />
        <Property Name="reportingManagerId" Type="Edm.String" />
        
        <!-- 30-33. Work Coordinates -->
        <Property Name="workEmail" Type="Edm.String" />
        <Property Name="workPhone" Type="Edm.String" />
        <Property Name="workLocation" Type="Edm.String" />
        <Property Name="workMode" Type="Edm.String" />
        
        <!-- 34-37. Experience & Compensation -->
        <Property Name="totalExperience" Type="Edm.Decimal" Scale="1" Precision="4" />
        <Property Name="probationStatus" Type="Edm.String" />
        <Property Name="workShift" Type="Edm.String" />
        <Property Name="salary" Type="Edm.Decimal" Scale="2" Precision="12" />
        
        <!-- 38-40. Governance & Roles -->
        <Property Name="noticePeriod" Type="Edm.String" />
        <Property Name="accountStatus" Type="Edm.String" />
        <Property Name="userRole" Type="Edm.String" />
        <Property Name="presence" Type="Edm.String" />
        
        <!-- 41-42. Timestamps -->
        <Property Name="createdAt" Type="Edm.DateTimeOffset" />
        <Property Name="updatedAt" Type="Edm.DateTimeOffset" />

        <!-- Navigation Properties -->
        <NavigationProperty Name="Job" Type="OrangeCat.LMS.JobDetail" />
        <NavigationProperty Name="Personal" Type="OrangeCat.LMS.PersonalDetail" />
        <NavigationProperty Name="Custom" Type="Collection(OrangeCat.LMS.CustomField)" />
      </EntityType>

      <!-- JobDetail Entity Type -->
      <EntityType Name="JobDetail">
        <Key>
          <PropertyRef Name="employeeId" />
        </Key>
        <Property Name="employeeId" Type="Edm.String" Nullable="false" />
        <Property Name="employeeCode" Type="Edm.String" />
        <Property Name="companyName" Type="Edm.String" />
        <Property Name="department" Type="Edm.String" />
        <Property Name="designation" Type="Edm.String" />
        <Property Name="jobRole" Type="Edm.String" />
        <Property Name="role" Type="Edm.String" />
        <Property Name="employmentType" Type="Edm.String" />
        <Property Name="dateOfJoining" Type="Edm.Date" />
        <Property Name="employmentStatus" Type="Edm.String" />
        <Property Name="reportingManagerId" Type="Edm.String" />
        <Property Name="workEmail" Type="Edm.String" />
        <Property Name="workPhone" Type="Edm.String" />
        <Property Name="workLocation" Type="Edm.String" />
        <Property Name="workMode" Type="Edm.String" />
        <Property Name="totalExperience" Type="Edm.Decimal" Scale="1" Precision="4" />
        <Property Name="probationStatus" Type="Edm.String" />
        <Property Name="workShift" Type="Edm.String" />
        <Property Name="salary" Type="Edm.Decimal" Scale="2" Precision="12" />
        <Property Name="noticePeriod" Type="Edm.String" />
        <Property Name="accountStatus" Type="Edm.String" />
        <Property Name="userRole" Type="Edm.String" />
        <Property Name="presence" Type="Edm.String" />

        <!-- Navigation from Job to Personal -->
        <NavigationProperty Name="Personal" Type="OrangeCat.LMS.PersonalDetail" />
      </EntityType>

      <!-- PersonalDetail Entity Type -->
      <EntityType Name="PersonalDetail">
        <Key>
          <PropertyRef Name="employeeId" />
        </Key>
        <Property Name="employeeId" Type="Edm.String" Nullable="false" />
        <Property Name="firstName" Type="Edm.String" Nullable="false" />
        <Property Name="middleName" Type="Edm.String" />
        <Property Name="lastName" Type="Edm.String" Nullable="false" />
        <Property Name="name" Type="Edm.String" />
        <Property Name="profilePhoto" Type="Edm.String" />
        <Property Name="avatar" Type="Edm.String" />
        <Property Name="dateOfBirth" Type="Edm.Date" />
        <Property Name="gender" Type="Edm.String" />
        <Property Name="personalEmail" Type="Edm.String" />
        <Property Name="phone" Type="Edm.String" />
        <Property Name="alternatePhone" Type="Edm.String" />
        <Property Name="presentAddress" Type="Edm.String" />
        <Property Name="permanentAddress" Type="Edm.String" />
        <Property Name="city" Type="Edm.String" />
        <Property Name="state" Type="Edm.String" />
        <Property Name="pinCode" Type="Edm.String" />
        <Property Name="nationality" Type="Edm.String" />
        <Property Name="emergencyContactName" Type="Edm.String" />
        <Property Name="emergencyContactNumber" Type="Edm.String" />
        <Property Name="highestQualification" Type="Edm.String" />
        <Property Name="maritalStatus" Type="Edm.String" />

        <!-- Navigation from Personal to Custom -->
        <NavigationProperty Name="Custom" Type="Collection(OrangeCat.LMS.CustomField)" />
        <NavigationProperty Name="Job" Type="OrangeCat.LMS.JobDetail" />
      </EntityType>

      <!-- CustomField Entity Type -->
      <EntityType Name="CustomField">
        <Key>
          <PropertyRef Name="id" />
        </Key>
        <Property Name="id" Type="Edm.String" Nullable="false" />
        <Property Name="fieldId" Type="Edm.String" />
        <Property Name="employeeId" Type="Edm.String" />
        <Property Name="name" Type="Edm.String" />
        <Property Name="category" Type="Edm.String" />
        <Property Name="type" Type="Edm.String" />
        <Property Name="value" Type="Edm.String" />
        <Property Name="options" Type="Edm.String" />
        <Property Name="required" Type="Edm.Boolean" />
      </EntityType>

      <!-- Entity Container Definition -->
      <EntityContainer Name="Container">
        <EntitySet Name="Employees" EntityType="OrangeCat.LMS.Employee">
          <NavigationPropertyBinding Path="Job" Target="JobDetails" />
          <NavigationPropertyBinding Path="Personal" Target="PersonalDetails" />
          <NavigationPropertyBinding Path="Custom" Target="CustomFields" />
        </EntitySet>
        <EntitySet Name="JobDetails" EntityType="OrangeCat.LMS.JobDetail">
          <NavigationPropertyBinding Path="Personal" Target="PersonalDetails" />
        </EntitySet>
        <EntitySet Name="PersonalDetails" EntityType="OrangeCat.LMS.PersonalDetail">
          <NavigationPropertyBinding Path="Custom" Target="CustomFields" />
          <NavigationPropertyBinding Path="Job" Target="JobDetails" />
        </EntitySet>
        <EntitySet Name="CustomFields" EntityType="OrangeCat.LMS.CustomField" />
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>